home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs49.d81
/
hack10a.sfx
/
issue10a
Wrap
Text File
|
1990-02-12
|
82KB
|
2,009 lines
########
##################
###### ######
#####
##### #### #### ## ##### #### #### #### #### #### #####
##### ## ## #### ## ## ## ### ## #### ## ## ##
##### ######## ## ## ## ##### ## ## ## ## ##
##### ## ## ######## ## ## ## ### ## ## #### ## ##
##### #### #### #### #### ##### #### #### #### #### #### ######
##### ##
###### ###### ╔SSUE #10
################## ╩UNE 30, 1995
########
----------------------------------------------------------------------(V1.1)--
┼DITOR'S ╬OTES
BY ├RAIG ╘AYLOR
╘HIS IS MY LAST ISSUE OF ├OMMODORE ╚ACKING (HAVING FINALLY GOTTEN OUT THE
DOOR, BUT ╔ COULDN'T BREAK TRADITION AND GET IT OUT ON TIME :-) ). ╔'M HAVING
TO GIVE IT UP BECAUSE ╔'VE GRADUALLY LOST INTEREST IN ├OMMODORE COMPUTERS OVER
THE YEARS AND WITH THE SEARCH FOR A JOB (ANYONE WANNA HIRE A CSC GRADUATE?)
AND AS ╔ GET OLDER ╔ SEEM TO HAVE LESS AND LESS TIME.
╔'M GONNA BE HANDING THE REIGNS OF ├OMMODORE ╚ACKING OVER TO ╩IM ┬RAIN, WHO IS
A VERY ACTIVE MEMBER OF THE ├OMMODORE ╔NTERNET COMMUNITY. ╚E WILL ALSO BE
RUNNING A MAILSERVER THAT WILL TAKE THE PLACE OF MINE (═INE WILL BECOME
UNAVAILABLE AFTER ╩ULY 1ST AND WILL SEND POINTERS TO ╩IM ┬RAIN'S MAILSERVER).
╔T'S BEEN INTERESTING TO WATCH THE ├OMMODORE COMPUTERS EVOLVE, TAKE OFF LIKE A
ROCKET AND THEN HAVE ├OMMODORE GO INTO LIQUIDATION. ├OMMODORE COMPUTERS HAVE
BEEN AND STILL ARE, (WITH SOME EXCEPTIONS - 1541 HEAD-BANGING COMES TO MIND),
TECHNOLOGICALLY SOUND. ╞OR A "HACKING" MACHINE THEY'RE WONDERFUL.
═Y EMAIL ADDRESS HAS CHANGED TO DUCK@NANDO.NET. ╔ PERIODICALLY STILL CHECK
MAIL AT DUCK@PEMBVAX1.PEMBROKE.EDU BUT ONLY EVERY 2 WEEKS OR SO. ╔ AM STILL
GOING TO TRY TO BE IN THE ├OMMODORE COMMUNITY BUT TIME WILL GOVERN MY ABILITY
TO DO THAT. ╔'M GOING TO MISS EDITING THIS RAG....
┴ND HERE IS ╩IM ┬RAIN:
═AIL ╙ERVER ├HANGES:
╫ITH ╔SSUE 10, THE ADDRESS FOR THE ├OMMODORE ╚ACKING MAIL SERVER HAS CHANGED.
╘HE NEW ADDRESS IS BRAIN@MAIL.MSEN.COM ╘HE COMMANDS ARE THE SAME AS BEFORE.
╬OT ALL OF THE FILES HAVE BEEN MOVED YET, SO PLEASE EMAIL THE ADMINISTRATOR
(╩IM ┬RAIN, BRAIN@MAIL.MSEN.COM) IF A FILE YOU NEED IS NOT ON THE NEW SITE.
╚OWDY:
╚OWDY, MY NAME IS ╩IM ┬RAIN, AND ╔ WILL BE TAKING OVER THE POSITION OF
EDITOR FOR ├OMMODORE ╚ACKING STARTING WITH ╔SSUE 11. ╙OME OF YOU MAY KNOW
ME AS THE ├OMMODORE ╘RIVIA ├ONTEST ADMINISTRATOR, THE ╒╙┼╬┼╘ NEWSGROUP
COMP.SYS.CBM ╞┴╤ ═ANITAINER, OR THE KEEPER OF A ├OMMODORE ╔NFORMATION
╫╫╫ ╙ITE AT HTTP://WWW.MSEN.COM/▐BRAIN/CBMHOME.HTML. ╫HEREVER YOU HAVE
HEARD OF ME FROM, OR EVEN IF YOU HAVEN'T, ╔ WILL STATE THAT ╔ PLAN ON
HANDLING ├OMMODORE ╚ACKING IN THE FOLLOWING WAY. ╘HE NEXT ISSUE WILL
POSSIBLY LOOK DIFFERENT COSMETICALLY, AS ╔ EDIT SOMEWHAT DIFFERENTLY THAN
├RAIG, BUT THE CONTENT AND BASIC LAYOUT WILL REMAIN THE SAME. ╘HE TYPES
OF MATERIAL WILL NOT CHANGE, AND THE STRUCTURE FOR SUBMITTING ARTICLES WILL
CHANGE ONLY IN THE ADDRESS TO MAIL THEM TO: BRAIN@MAIL.MSEN.COM. ╚OWEVER,
╔ DO HAVE A FEW CHANGES IN MIND:
1) ╘RY TO STABILIZE THE ISSUE GENERATION SO THAT ├OMMODORE ╚ACKING WILL
BECOME A QUARTERLY PUBLICATION.
2) ┴TTEMPT A FULLY "╚╘═╠"IZED VERSION OF THE MAGAZINE, WHILE STILL PROVIDING A
TEXT VERSION.
3) ╨URSUE THE POSSIBILITY OF PROVIDING A PRINTED VERSION OF THESE ISSUES
FOR THOSE WHO HAVE NO ONLINE ACCESS TO THEM.
4) ┼NCOURAGE ╒SER ╟ROUPS AND OTHER ├┬═ RELATED ORGANIZATIONS TO CARRY THIS
MAGAZINE FOR THEIR MEMBERS.
╙O, AGAIN ╔ SAY HOWDY. ┴S ALWAYS, ├OMMODORE ╚ACKING WILL ACCEPT YOUR
ARTICLES AT ANY TIME, SO PLEASE HELP US KEEP THIS QUALITY MAGAZINE RUNNING.
╔F YOU HAVE ANY QUESTIONS OR COMMENTS ABOUT THE CHANGE IN EDITORSHIP, THE
POSSIBLE CHANGES, OR OTHER MATTERS, PLEASE FEEL FREE TO DROP ME A NOTE.
╔ LOOK FORWARD TO HEARING FROM YOU AND PUBLISHING YOUR ARTICLES.
╩IM ┬RAIN
BRAIN@MAIL.MSEN.COM
===========================================================================
╠EGAL ═UMBO-╩UMBO
╨ERMISSION IS GRANTED TO RE-DISTRIBUTE THIS "NET-MAGAZINE", IN WHOLE,
FREELY FOR NON-PROFIT USE. ╚OWEVER, PLEASE CONTACT INDIVIDUAL AUTHORS FOR
PERMISSION TO PUBLISH OR RE-DISTRIBUTE ARTICLES SEPARATELY. ┴ CHARGE OF NO
GREATER THAN 5 ╒╙ DOLLARS OR EQUIVLENT MAY BE CHARGED FOR LIBRARY SERVICE /
DISKETTTE COSTS FOR THIS "NET-MAGAZINE".
-------------------------------------------------------------------------------
╨LEASE NOTE THAT THIS ISSUE AND PRIOR ONES ARE AVAILABLE VIA ANONYMOUS ╞╘╨
FROM CCNGA.UWATERLOO.CA (AMONG OTHERS) UNDER /PUB/CBM/HACKING.MAG AND VIA A
MAILSERVER WHICH DOCUMENTATION CAN BE OBTAINED BY SENDING MAIL TO
"BRAIN@MAIL.MSEN.COM" WITH A SUBJECT LINE OF "MAILSERVER" AND THE
LINES OF "HELP" AND "CATALOG" IN THE BODY OF THE MESSAGE.
-------------------------------------------------------------------------------
╔N ╘HIS ╔SSUE:
├OMMODORE ╘RIVIA
╘RIVIA ┼DITION #13-18 ARE IN THIS ARTICLE. ┴S YOU MAY KNOW, THESE QUESTIONS
FORM PART OF A CONTEST IN WHICH THE MONTHLY WINNER GETS A PRIZE (╘HANKS TO MY
VARIOUS PRIZE DONATORS). ╘HE WHOLE THING IS MAINLY JUST FOR FUN, SO PLEASE
ENJOY. ╘RY YOUR HAND AT ├OMMODORE TRIVIA!!
┬╞╠╔ - ╬EW GRAPHICS MODES 2
╞╠╔ GAVE US MORE COLOR TO THE SCREEN, ┴╞╠╔ INCREASED THE HORIZONTAL
RESOLUTION AND COLOR SELECTION BY USING THE HIRES MODE. ┬╞╠╔ STANDS
FOR '┬IG ╞╠╔' AND GIVES US 400 LINES INSTEAD OF THE USUAL TWO
HUNDRED. ┴╞╠╔ AND ┬╞╠╔ CAN BE COMBINED, BUT WE ARE NOT GOING INTO
THAT.
═AKING STABLE RASTER ROUTINES (├64 AND ╓╔├-20)
╔N THIS ARTICLE, ╔ DOCUMENT TWO METHODS OF CREATING STABLE RASTER
ROUTINES ON ├OMMODORE COMPUTERS. ╘HE PRINCIPLES APPLY FOR MOST 8-BIT
COMPUTERS, NOT ONLY ├OMMODORES, BUT RASTER EFFECTS ARE VERY RARELY
SEEN ON OTHER COMPUTERS.
┴ ─IFFERANT ╨ERSPECTIVE - ╨ART ╔╔╔.
┘ES!!! ╔T'S YET ANOTHER ARTICLE ON 3─ GRAPHICS! ┼VEN IF YOU
HAVEN'T BEEN FOLLOWING THIS SERIES, YOU CAN USE THIS PROGRAM. ╘HIS
TIME AROUND WE WILL WRITE A COMPLETELY GENERAL POLYGON PLOTTER --
IF YOU CAN TYPE BASIC DATA STATEMENTS, YOU CAN CREATE A THREE-DIMENSIONAL
OBJECT OUT OF POLYGONS AND ROTATE AND PROJECT IT TO YOUR HEART'S CONTENT.
╞OR THE MORE TECHNICALLY INCLINED WE WILL LOOK AT OPTIMIZATIONS TO THE
LINE ROUTINE, ┼╧╥-BUFFER FILLING, AND MORE! ┘OW!
╙ECOND ╙╔─ ├HIP ╔NSTALLATION
╘HIS ARTICLE DESCRIBES HOW TO ADD A SECOND SID CHIP FOR USE IN ╙ID╨LAYER AND
OTHER PROGRAMS. ┴S ALWAYS, BE EXTRA CAREFUL WHEN MAKING MODIFICATIONS TO YOUR
COMPUTER.
╙OLVING ╠ARGE ╙YSTEMS OF ╠INEAR ┼QUATIONS ON A ├64 ╫ITHOUT ═EMORY
╧╦, NOW THAT ╔ HAVE YOUR ATTENTION, ╔ LIED. ┘OU CAN'T SOLVE DENSE
LINEAR SYSTEMS OF EQUATIONS BY DIRECT METHODS WITHOUT USING MEMORY TO
STORE THE PROBLEM DATA. ╚OWEVER, ╔'LL COME BACK TO THIS MEMORY FREE
ASSERTION LATER. ╘HE MAIN PURPOSE OF THIS ARTICLE IS TO RESCUE A
USEFULL NUMERICAL ALGORITHM, "╤UARTERSOLVE", AND ALSO TO PROVIDE A BRIEF
LOOK AT THE ├╧═┴╠ PROGRAMMING LANGUAGE AND ┬╠┴╙ ROUTINES.
╘HE ╫ORLD OF ╔╥├ - ┴ ╬EW ╠IFE FOR THE ├64/128
╔'VE HEARD PEOPLE TALKING ABOUT ╔╥├. ╫HAT IS IT? ╫HY IS IT USEFUL TO ME AS A
├OMMODORE USER? ┬ILL "├OOLHAND" ╠UECK EXPLAINS THE HOWS AND WHYS IN THIS
ARTICLE.
╙WIFT╠INK-232 ┴PPLICATION ╬OTES (VERSION 1.0B)
╘HIS INFORMATION IS MADE AVAILABLE FROM A PAPER DOCUMENT PUBLISHED BY ├═─,
WITH ├═─'S PERMISSION.
─ESIGN AND ╔MPLEMENTATION OF A ╙IMPLE/┼FFICIENT ╒PLOAD/─OWNLOAD ╨ROTOCOL
╘HIS ARTICLE DETAILS HOW TO IMPLEMENT A CUSTOM UPLOAD/DOWNLOAD PROTOCOL THAT
IS FASTER THAN MOST OF THE ONES COMMON TO THE ├64/128 COMPUTERS.
─ESIGN AND ╔MPLEMENTATION OF A '╥EAL' ╧PERATING ╙YSTEM FOR THE 128: ╨ART ╔╔
╘HERE HAS BEEN A SLIGHT CHANGE IN PLANS. ╔ ORIGINALLY INTENDED THIS
ARTICLE TO GIVE THE DESIGN OF A THEORETICAL DISTRIBUTED MULTITASKING
MICROKERNEL OPERATING SYSTEMFOR THE ├128. ╔ HAVE DECIDED TO GO A
DIFFERENT ROUTE: TO TAKE OUT THE DISTRIBUTED COMPONENT FOR NOW AND IMPLEMENT
A REAL MULTITASKING MICROKERNEL ╧╙ FOR A SINGLE MACHINE AND EXTEND THE SYSTEM
TO BE DISTRIBUTED LATER. ╘HE IMPLEMENTATION SO FAR IS, OF COURSE, ONLY IN
THE PROTOTYPE STAGE AND THE APPLICATION FOR IT IS ONLY A DEMO. ╨ART ╔╔╔ OF
THIS SERIES WILL EXTEND THIS DEMO SYSTEM INTO, PERHAPS, A USABLE DISTRIBUTED
OPERATING SYSTEM.
========================================================================
╘RIVIA
BY ╩IM ┬RAIN (BRAIN@MAIL.MSEN.COM)
╫ELL, SUMMER IS UPON THE ┬RAIN HOUSEHOLD, AND THINGS ARE MOVING AT A FAST
CLIP AT THE HOUSE. ╚OWEVER, THE TRIVIA STILL KEEPS COMING. ╔ APPRECIATE
ALL THE PEOPLE WHO CONTRIBUTE TO THE TRIVIA AND ALL THE PEOPLE WHO TAKE
PART IN THE MONTHLY CONTEST. ╔ HAVE COLLECTED ╘RIVIA ┼DITION #13-18 IN THIS
ARTICLE. ┴S YOU MAY KNOW, THESE QUESTIONS FORM PART OF A CONTEST IN WHICH
THE MONTHLY WINNER GETS A PRIZE (╘HANKS TO MY VARIOUS PRIZE DONATORS).
╘HE WHOLE THING IS MAINLY JUST FOR FUN, SO PLEASE ENJOY.
┴S THE SUMMER MONTHS START UP, NEWS ON THE TRIVIA INCLUDES:
1) ╔ NOW HAVE ACCESS TO SOME MORE ORPHAN MACHINES (├65, ├116), SO EXPECT
SOME TRIVIA QUESTIONS ON THOSE MODELS.
2) ╘HE NEW HOME NOW HAS A NUMBER OF MACHINES SET UP, SO TESTING ANSWERS TO
THE TRIVIA IS EVEN EASIER. ╔ AM STILL TRYING TO GET THE OLD ╨┼╘
MACHINES IN HOUSE, BUT THE OTHERS ARE HERE.
3) ╘HE ├OMMODORE ╫ORLD ╫IDE ╫EB ╨AGES (HTTP://WWW.MSEN.COM/▐BRAIN/CBMHOME.HTML)
THAT ╔ MAINTAIN AND PLACE THE TRIVIA ON CAUGHT THE EYE OF ╒╙┴ ╘ODAY AND
THE ╨HEONIX ╟AZETTE. ╔ WAS INTERVIEWED FOR BOTH ARTICLES. ╠OOK IN THE
╩UNE 20TH EDITION OF ╒╙┴ ╘ODAY FOR THE SEGMENT, AND POSSIBLY A PICTURE OF
╩IM ┬RAIN AND THE MACHINES HE USES TO CREATE THE TRIVIA.
┴S ALWAYS, ╔ WELCOME ANY QUESTIONS (WITH ANSWERS), AND ENCOURAGE PEOPLE
TO ENTER THEIR RESPONSES TO THE TRIVIA, NOW AT #18.
╩IM.
╘HE FOLLOWING ARTICLE CONTAINS THE ANSWERS TO THE ─ECEMBER EDITION OF TRIVIA
($0├0 - $0├╞), THE QUESTIONS AND ANSWERS FOR ╩ANUARY ($0─0 - $0─╞),
╞EBRUARY ($0┼0 - $0┼╞), ═ARCH ($0╞0 - $0╞╞), ┴PRIL ($100 - $10╞), AND THE
QUESTIONS FOR THE ═AY EDITION ($110 - $11╞). ┼NJOY THEM!
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #13 FOR ─ECEMBER, 1994
╤ $0├0) ╘HE EARLY 1541 DRIVES USED A MECHANISM DEVELOPED BY ______. ╬AME
THE COMPANY.
┴ $0├0) ┴LPS.
╤ $0├1) ╧N LATER MODELS, ├OMMODORE SUBSEQUENTLY CHANGED MANUFACTURERS
FOR THE 1541 DRIVE MECHANISM. ╬AME THE NEW MANUFACTURER.
┴ $0├1) ╬EWTRONICS.
╤ $0├2) ╫HAT IS THE MOST OBVIOUS DIFFERENCE(S). (╧NLY ONE DIFFERENCE IS
NECESSARY)
┴ $0├2) ┴LPS: PUSH-TYPE LATCH, ROUND ╠┼─.
╬EWTRONICS: LEVER-TYPE LATCH, RECTANGULAR ╠┼─.
╤ $0├3) ╧N ├OMMODORE ┬┴╙╔├ ╓2.0, WHAT ANSWER DOES THE FOLLOWING GIVE:
╨╥╔╬╘ (╙╤╥(9)=3)
┴ $0├3) 0. ┴CCORDING TO ├OMMODORE ┬┴╙╔├, THE ANSWER SHOULD BBY -1, WHICH
IS THE ┬┴╙╔├ VALUE OF ╘╥╒┼. ╚OWEVER, THE ABOVE EQUATION IS ╬╧╘
TRUE. ─OING ╨╥╔╬╘ ╙╤╥(9) YIELDS 3, BUT DOING ╨╥╔╬╘ (╙╤╥(9)-3)
YIELDS 9.31322575┼-10 (├64). ╘HIS ANOMALY CAN BE ATTRIBUTED TO
ROUNDOFF ERRORS IN THE FLOATING POINT MATH ROUTINES IN ├OMMODORE ┬┴╙╔├.
╤ $0├4) ╔N ├OMMODORE ┬┴╙╔├ (┴NY VERSION) WHAT DOES ┬ EQUAL AFTER THE FOLLOWING
RUNS: ├=0:┬=├=0
┴ $0├4) ┬ = -1. ╘HE SECOND STATEMENT IS THE ONE TO LOOK AT. ╘HE SECOND
EQUALS SIGN IS TREATED AS A COMPARISON, WHILE THE FIRST IS TREATED
AS A ASSIGNMENT. ┬ GETS SET TO THE OUTCOME OF THE COMPARISON, WHICH
IS ╘╥╒┼ (-1).
╤ $0├5) ╘HE FIRST ╨┼╘ CASSETTE DECKS WERE ACTUALLY _______ BRAND CASSETTE
PLAYERS, MODIFIED FOR THE ╨┼╘ COMPUTERS. ╬AME THE COMAPNY.
┴ $0├5) ╙ANYO. ╙PECIFICALLY, ═ODEL ═1540┴. ╫HAT A MODEL NUMBER!
╤ $0├6) ╔N ├OMMODORE ┬┴╙╔├ (┴NY VERSION), WHAT HAPPENS IF THE FOLLOWING
PROGRAM IS RUN:
10 ╩=0
20 ╔╞ ╩=0 ╟╧ ╘╧ 40
30 ╨╥╔╬╘ "╩<>0"
40 ╨╥╔╬╘ "╩=0"
┴ $0├6) ╧N ┬┴╙╔├ 2.0 OR GREATER:
?╙┘╬╘┴╪ ┼╥╥╧╥ ╔╬ 20
╥┼┴─┘.
╧N ┬┴╙╔├ 1.0: (FOUND ON THE ╨┼╘ 2001 SERIES)
╩=0
╥┼┴─┘.
┬┴╙╔├ 1.0 TOTALLY IGNORED SPACES, SO LINE 20 BECAME "╔╞╩=0╟╧╘╧40".
╘HAT STATEMENT WOULD BE CORRECTLY PARSED, SICNE IT CONTAINS THE "╟╧╘╧"
KEYWORD.
╚OWEVER, ON ┬┴╙╔├ 2.0 OR GREATER, SPACES WEREN'T IGNORED SO
COMPLETELY, AND THE "╘╧" IN "╟╧ ╘╧" WOULD BE TOKENIZED SEPARATELY, SO
SOME CODE WAS ADDED TO ┬┴╙╔├ TO CHECK TO "╟╧". ┴S THE CODE THAT
ACCEPTS ╟╧╘╧ AS A SPECIAL CASE FOR ╘╚┼╬ AFTER AN ╔╞ STATEMENT WASN'T
PATCHED THIS WAY, THE ABOVE FAILS, BECAUSE ╟╧ IS NOT A VALID KEYWORD
AFTER ╔╞. ╘HE STATEMENT ╙╚╧╒╠─ WORK CORRECTLY, BUT DOES NOT BECAUSE
OF THIS FAILURE TO FIX THE ╔╞ COMMAND PARSING.
╧N ┬┴╙╔├ 2.0 OR GREATER, SUBSTITUTING THE FOLLOWING LINE FOR LINE 20
WILL CAUSE THE PROGRAM TO WORK:
20 ╔╞ ╩=0 ╘╚┼╬ ╟╧ ╘╧ 40
╤ $0├7) ╔N QUESTION $068, WE LEARNED HOW ╩ACK ╘RAMIEL FIRST HAPPENED UPON THE
NAME "├╧══╧─╧╥┼". ┴CCORDING TO THE STORY, THOUGH, IN WHAT COUNTRY
WAS HE IN WHEN HE FIRST SAW IT?
┴ $0├7) ╟ERMANY.
╤ $0├8) ╧N THE ├OMMODORE USER PORT CONNECTOR, HOW MANY EDGE CONTACTS ARE
THERE?
┴ $0├8) 24. ╘WO ROWS OF 12 CONTACTS EACH.
╤ $0├9) ╧N MOST ├OMMODORE COMPUTERS, A LOGICAL ┬┴╙╔├ SCREEN LINE CAN CONTAIN
UP TO 80 CHARACTERS. ╧N WHAT ├OMMODORE COMPUTER(S) IS THIS NOT TRUE?
┴ $0├9) ┴CCORDING TO ├OMMODORE DOCUMENTATION, A _PHYSICAL_ SCREEN LINE IS
DEFINED AS ONE SCREEN LINE OF CHARACTERS. ┴ _LOGICAL_ SCREEN LINE IS
DEFINED AS HOW MANY _PHYSICAL_ LINES CAN BE CHAINED TOGETHER TO
CREATE A VALID ┬┴╙╔├ PROGRAM LINE.
╫ITH THAT IN MIND, MOST ├OMMODORE COMPUTERS CHOSE A _LOGICAL_
SCREEN LINE THAT WAS A MULTIPLE OF THE SCREEN WIDTH. ╘HIS WORKS FINE
FOR 40 AND 80 COLUMN SCREENS, BUT WHAT DO WE DO WITH THE ╓╔├-20, WITH
ITS 22 COLUMN SCREEN. ╙OLUTION: MAKE THE _LOGICAL_ LINE LENGTH EQUAL
TO 4 _PHYSICAL_ LINES, OR 88 COLUMNS.
╫HEN THE ├OMMDORE 128 WAS INTRODUCED, THE NUMBER ROSE TO 160
CHARACTERS, WHICH IS 4 _PHYSICAL_ LINES IN 40 COLUMN MODE, OR
2 _PHYSICAL_ LINES IN 80 COLUMN MODE. ╚OWEVER, YOU CAN ONLY TAKE
ADVANTAGE OF THIS IN 128 MODE. 64 MODE IS LIMITED TO 80 CHARACTERS.
╘O ADD TO ALL THIS CONFUSION, A VALID ┬┴╙╔├ PROGRAM LINE (IN MEMORY)
CAN ACTUALLY BE 255 (TOKENIZED) CHARACTERS LONG, BUT CREATING SUCH
A LONG LINE CANNOT BE DONE FROM THE BUILT-IN EDITOR IN DIRECT MODE.
╘HE ┴MIGA┬┴╙╔├, AVAILABLE ON THE ┴MIGA, ALSO DOES NOT HAVE THE 80
COLUMN LINE LIMIT. ╚OWEVER, THAT ┬┴╙╔├ IS ╙╧╧╧ MUCH DIFFERENT THAT
╔ AM NOT SURPRISED. ╘HE OLDER ├┬═ ┬┴╙╔├S, ON THE OTHER HAND, WERE
ALL DERIVATIVES OF THE ORIGINAL ╠EVEL 1 ┬┴╙╔├ FOR THE ╨┼╘.
╤ $0├┴) ╔F A FILE IS SAVED TO A ├OMMODORE ─ISK ─RIVE WITH THE FOLLOWING
CHARACTERS: CHR$(65);CHR$(160);CHR$(66), WHAT WILL THE DIRECTORY
ENTRY LOOK LIKE?
┴ $0├┴) ╘HE FILENAME WILL SHOW UP AS "┴"┬, WITH THE '┬' SHOWING UP TO THE
RIGHT OF THE '"' MARK. ╘HIS COULD BE USED TO MAKE PROGRAM LOADING
EASIER. ┴ FILE THAT SHOWED UP AS "FILENAME",8,1 COULD BE LOADED
BY SIMPLY HITTING SHIFT-RUN/STOP ON THAT LINE.
╤ $0├┬) ╫HAT IS THE MAXIMUM LENGTH (IN CHARACTERS) OF A ├┬═ DATASETTE
FILENAME?
┴ $0├┬) ╥EFERENCES ╔ HAVE ON HAND SAY 128 CHARACTERS. ╚OWEVER, THE ACTUAL
CODE ON THE 8032 AND THE ├64 ACTS AS THOUGH 187 CHARACTERS CAN
ACTUALLY BE SENT (TAPE BUFFER-5 CONTROL BYTES = 192-5=187). ╘HE
REFERENCES THAT CLAIM 128 CHARACTERS ARE ╬ICK ╚AMPSHIRE'S
_╘HE ╓╔├ ╥EVEALED_ AND _╘HE ╨┼╘ ╥EVEALED_. ┴╬YONE CARE TO LAY
THIS ONE TO REST?
╤ $0├├) ╚OW MANY KEYS ARE ON A STOCK ├OMMODORE 64 KEYBOARD?
┴ $0├├) 66 KEYS. ╘HIS IS THE SAME NUMBER AS FOUND ON THE ╓╔├-20 AND THE
├OMMODORE 16.
╤ $0├─) ├OMMODORE ┬┴╙╔├ USES KEYWORD "TOKENS" TO SAVE PROGRAM SPACE. ╘OKEN
129 BECOMES "╞╧╥". ╫HAT TWO TOKENS EXPAND TO INCLUDE A LEFT
PARENTHESIS AS WELL AS A ┬┴╙╔├ KEYWORD?
┴ $0├─) ╘┴┬( (163) AND ╙╨├( (166).
╤ $0├┼) ╘HERE ARE 6 WIRES IN THE ├OMMODORE SERIAL BUS. ╬AME THE 6 WIRES.
┴ $0├┼) 1) ╙ERIAL /╙╥╤╔╬
2) ╟╬─
3) ╙ERIAL ┴╘╬ ╔╬/╧╒╘
4) ╙ERIAL ├╠╦ ╔╬/╧╒╘
5) ╙ERIAL ─┴╘┴ ╔╬/╧╒╘
6) /╥┼╙┼╘
╤ $0├╞) ╧N THE ├OMMODORE DATASETTE CONNECTOR, HOW MANY LOGICAL CONNECTIONS ARE
THERE?
┴ $0├╞) 6. ╧PPOSING PINS ON THE CONNECTOR ARE HOOKED TOGETHER ELECTRICALLY.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #14 FOR ╩ANUARY, 1995
╤ $0─0) ╚OW MANY KEYS WERE THERE ON THE "ORIGINAL" ╨┼╘ AND WHAT WAS SPECIAL
ABOUT THEM?
┴ $0─0) THE ORIGINAL ╨┼╘ HAD 73 CALCULATOR-STYLE KEYS THAT WERE LAID OUT
IN A RECTANGULAR MATRIX, NOT TYPEWRITER-STYLE.
╤ $0─1) ╚OW DO YOU PRODUCE THE "HIDDEN" MESSAGE(S) ON THE ├OMMODORE 128?
┴ $0─1) ╙┘╙ 32800,123,45,6. ╘HE SCREEN WILL CLEAR, AND THE SOFTWARE
AND HARDWARE DEVELOPERS ON THE 128 PROJECT WILL BE NAMED.
╘HE EXACT TEXT IS AS FOLLOWS:
[╥╓╙] ┬ROUGHT TO YOU BY...
╙OFTWARE:
╞RED ┬OWEN
╘ERRY ╥YAN
╓ON ┼RTWINE
╚ERDWARE:
┬IL ╚ERD
─AVE ╚AYNIE
╞RANK ╨ALAIA
[╥╓╙]╠INK ARMS,DON'T MAKE THEM.
╤ $0─2) ╚OW MUCH MEMORY DID THE "ORIGINAL" ╨┼╘ SHOW ON BOOTUP?
┴ $0─2) ╘HE "ORIGINAL" ╨┼╘ CAME IN TWO CONFIGURATIONS, 4╦ AND 8╦, SO:
╘HE ╨┼╘ 2001-4 HAD 3071 BYTES.
╘HE ╨┼╘ 2001-8 HAD 7167 BYTES.
╤ $0─3) ╫E ALL KNOW THE "REBOOT" SYS FOR THE 64 IS SYS 64738, BUT WHO KNOWS
THE SAME SYS LOCATION TO REBOOT THE ├┬═ 8032?
┴ $0─3) SYS 64790
╤ $0─4) ╫HICH COMPUTER(S) BEEPED AT BOOTUP? (═AY BE MORE THAN ONE, BUT ONLY
ONE REQUIRED)
┴ $0─4) ╔ KNOW SOME OF THESE ARE CORECT, BUT THE SHEER SIZE OF THE
LIST PREVENTS ME FROM CHECKING THEM ┴╠╠ OUT.
╞┴╘ 40╪╪ SERIES
80╪╪ SERIES
╨├-10 (╔ SUSPECT A NUMBER OF ╔┬═ CLONES DID, AND THESE THINGS HAVE
NO CONSISTENT NAMING CONVENTION ACROSS COUNTRY BOUNDARIES.)
╨├-20
┴MIGA 1000
╙╨9000 (╙UPER╨┼╘)
╤ $0─5) ╚OW MUCH MEMORY DID THE ├┬═ 8032 SHOW ON BOOTUP?
┴ $0─5) 31743 BYTES.
╤ $0─6) ├ERTAIN ├OMMODORE COMPUTERS PROVIDED EMTPY ┼╨╥╧═ SOCKETS ON THE
MOTHERBOARD. ╟IVE ME THE NUMBER OF EMPTY SOCKETS ON THE FOLLOWING
MACHINES:
A) ├┬═ 30╪╪.
B) ├┬═ 8╪╪╪.
C) ├┬═ ├128.
D) ╨LUS/4.
┴ $0─6) A) 3 SOCKETS.
B) 2 SOCKETS.
C) 1 SOCKET.
D) 1 SOCKET.
╤ $0─7) ╔N ╟ERMANY, THE ├┬═ 8032 CAME WITH A 4K┬ ┼╨╥╧═ FOR THE ┼╪╪╪ AREA,
WHILE THE ╒╙ VERSION ONLY HAD A 2K┬ ┼╨╥╧═. ╫HY?
┴ $0─7) ╘HE ╟ERMAN VERSION HAD ADDITIONAL KEYBAORD DRIVERS FOR UMLAUT
CHARACTERS AND DEAD KEYS.
╤ $0─8) ╫HO PUBLISHED THE FIRST ╨┼╘ MEMORY MAP IN THE "╨┼╘ ╟AZETTE"?
┴ $0─8) ╬ONE OTHER THAN THE INFAMOUS ╩IM ┬UTTERFIELD.
╤ $0─9) ╫HICH IS FASTER TO MOVE THE SURSOR ON A ╨┼╘/├┬═ OR ├64: ╙┘╙ OR
╨╥╔╬╘?
┴ $0─9) ╨╥╔╬╘ IS FASTER, SINCE THE SYS APPROACH MUST PROCESS THE POKES
BEFORE THE SYS, WHICH ARE VERY SLOW.
╤ $0─┴) ╧N THE ┴MIGA 1000, WHERE ARE THE SIGNATURES OF THE FIRST ┴MIGA
DEVELOPERS LOCATED?
┴ $0─┴) ╔NSIDE THE TOP CASE OF THE ┴MIGA (1000).
╘HERE IS AN INTERESTING FOOTNOTE TO THIS QUESTION. ╔T SEEMS
THAT AT LEAST SOME ORIGINAL ┴MIGA MACHINES WERE LABELED AS
┴MIGA (WITH NU NUMBER). ╘HEN, AT SOME LATER POINT, THE NUMBER WAS
ADDED. ╔N ADDITION, ├OMMODORE PRODUCED SOME ┴MIGA 1000 MACHINES
WITHOUT THE SIGNATURES, BUT MOST HAD THE TELLTALE HANDWRITING ON
THE INSIDE OF THE CASE.
╤ $0─┬) ╧N THE 6502, WHAT DOES THE ACCUMULATOR CONTAIN AFTER THE FOLLOWING
IS EXECUTED:
LDA #$AA
SED
ADC #01
┴ $0─┬) ┴SSUME CARRY WAS CLEAR. ╔F SO, THEN $11 IS THE CORRECT ANSWER.
╤ $0─├) ╫HAT IS THE MODEL NUMBER OF THE ╒╙ ╬╘╙├ ╓╔├-╔╔ CHIP?
┴ $0─├) ╔TS FIRST NUMBER WAS 6567, AND THAT IS THE NUMBER MOST PEOPLE KNOW
IT BY, BUT ├OMMODORE PRODUCED A ╓╔├-╔╔ USING A NEW MANUFACTURING
PROCESS THAT WAS NUMBERED THE 8562.
╤ $0──) ╫HAT IS THE ┼UROPEAN ╨┴╠ ╓╔├-╔╔ CHIP'S MODEL NUMBER?
(╬OT SURE IF THAT'S ITS RIGHTFUL TERM, BUT ╔ HOPE YOU UNDERSTAND).
┴ $0──) ╙AME HERE. ╘HE PART NUMBER 6569 IS THE MOST REMEMBERED NUMBER, BUT
AN 8565 WILL WORK AS WELL.
╤ $0─┼) ┴SSUME YOU HAVE TWO COMPUTERS, ONE WITH EACH OF THE ABOVE CHIPS INSIDE.
╫HICH CHIP DRAWS MORE PIXELS ON THE SCREEN PER SECOND?
┴ $0─┼) ╬OTE, FOR THE PURPOSES OF THE CALCULATION ╔ AM PERFORMING, "PIXELS"
REFERS TO PICTURE ELEMENTS THAT CAN BE ADDDRESS AND MODIFIED USING
NORMAL ╓╔├ MODES, SO THERE ARE 320*200 "PIXELS" ON BOTH THE ╨┴╠
AND ╬╘╙├ SCREENS. (╔ PROBABLY SHOULD HAVE STATED THIS, BUT IT IS
TOO LATE NOW.) ┴LSO, THE SCREEN REFRESH RATES USED IN THE
CALCULATIONS ARE THOSE DEFINED BY THE RESPECTIVE TELEVISION
STANDARDS (60╚Z ╒.╙., 50╚Z ┼UROPEAN), EVEN THOUGH THE ACTUAL
FREQUENCIES ARE OFF BY A SMALL PERCENTAGE. (FOR EXAMPLE, THE ACTUAL
50╚Z REFRESH RATE ON ┼UROPEAN ╓╔├-╔╔ CHIPS WAS CALCULATES AS
50.124567╚Z BY ┴NDREAS ┬OOSE)
╙O, THE ╨┴╠ DRAWS 320*200*50 PIXELS PER SECOND = 3200000 PIXELS/S
╬╘╙├ DRAWS 320*200*60 PIXELS PER SECOND = 3840000 PIXLES/S
╬OW, SOME PEOPLE THOUGHT ╔ MEANT THE WHOLE SCREEN, NOT JUST THE
DISPLAY AREA PROVIDED BY THE ╓╔├-╔╔ CHIP. ╫ELL, ╔ AM NOT SURE
EXACTLY YOU CALCULATE PIXELS ON A SCREEN, SINCE THE NUMBERS COULD
VARY FROM DISPLAY TO DISPLAY, BUT IF WE MEASURE IN SCANLINES:
╨┴╠ = 312 SCANLINES * 50 = 15600 SCANLINES/S
╬╘╙├ = 262 SCANLINES * 60 = 15720 SCANLINES/S
╘HE ╬╘╙├ MACHINES WINS BOTH WAYS.
╤ $0─╞) ╔N ├OMMODORE ┬┴╙╔├, WHICH STATEMENT EXECUTES FASTER:
A = 2--2
OR
A = 2+2
┴ $0─╞) B IS THE CORRECT ANSWER, AND THERE ARE A COUPLE OF REASONS WHY:
1) 2--2 TAKES LONGER TO PARSE IN THE ┬┴╙╔├ INTERPRETER.
2) ├OMMODORE ┬┴╙╔├ SUBTRACTS BY COMPLEMENTING THE SIGN OF THE
SECOND NUMBER AND ADDING. ╘HIS INCURS EXTRA TIME.
╘HERE ARE EVEN MORE SUBTLE ONES, BUT ╔ LEAVE THEM AS AN
EXERCISE FOR THE READER. ╙END ME YOUR REASON WHY.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #15 FOR ╞EBRUARY, 1995
╤ $0┼0) ╫HAT IS THE DIFFERENCE(S) BETWEEN THE ╬EWTRONICS 1541 AND THE 1541├?
(ONLY ONE DIFFERENCE IS NEEDED)
┴ $0┼0) (╟EORGE ╨AGE, A NOTED AUTHORITY ON ├┬═ ─RIVES, INDICATED THAT ├OMMODORE
MADE THIS A TOUGH QUESTION TO ANSWER.) ┬Y THE TIME THE 1541├ WAS
INTRODUCED, ├OMMODORE THREW A NUMBER OF DRIVES TOGETHER AND CALLED
THEM 1541├S. ╘HE THEORETICAL 1541├ EXHIBITED THE FOLLOWING
FEATURES:
╬O HEAD BANGING, AND OTHER PROBLEMS FIXED BY MODIFIED ╥╧═S.
├ASE COLOR MATCHES ├64├ AND ├128 COMPUTERS.
╤ $0┼1) ╫HAT HAPPENS WHEN YOU TYPE 35072121 IN DIRECT MODE ON THE ├64 AND
HIT RETURN?
┴ $0┼1) ╙IMPLE ANSWER: ═OST LIKELY, THE SCREEN CLEARS AND THE WORD ╥┼┴─┘.
IS PRINTED AT SCREEN TOP. ╘HIS IS THE BEHAVIOR SEEN WHEN PRESSING
╥╒╬-╙╘╧╨/╥┼╙╘╧╥┼. ┴LTERNATELY, NOTHING COULD HAPPEN, OR THE COMPUTER
COULD LOCK UP.
╔NVOLVED ANSWER: ╘HERE IS A BUG IN ┬┴╙╔├ 2.0. ┼ASILY FIXED, BUT
DESTINED TO LIVE LIFE IMMORTAL. (LONG)
╘HE BUG IS IN THE ╨┼╘╙├╔╔ NUMBER TO BINARY CONVERSION ROUTINE AT
$A69B (╠╔╬╟┼╘). ╘HE ROUTINE BASICALLY READS IN A CHARACTER FROM THE
LINE, MULTIPLIES A PARTIAL RESULT BY 10 AND ADDS THE NEW CHARACTER
TO THE PARTIAL RESULT. ╚ERE IS A CODE SNIPPET:
A96A RTS
A96B LDX #$00 ; ZERO OUT PARTIAL RESULT
A96D STX $14
A96F STX $15
A971 BCS $A96A ; NOT A NUMBER, RETURN
A973 SBC #$2F ; ╨┼╘╙├╔╔ TO BINARY
A975 STA $07
A977 LDA $15 ; GET HI BYTE OR PARTIAL RESULT
A979 STA $22
A97B CMP #$19 ; PARTIAL > 6399
A97D BCS $A953 ; YES, GOTO ERROR
A97F LDA $14 ; LOAD LO BYTE OF RESULT
A981 ASL ; LO*2
A982 ROL $22 ; HI*2 + C
A984 ASL ; LO*2
A985 ROL $22 ; HI*2 + C
A987 ADC $14 ; COMPLETE LO*5
A989 STA $14
A98B LDA $22
A98D ADC $15 ; COMPLETE HI*5
A98F STA $15
A991 ASL $14 ; LO*2 COMPLETE LO*10
A993 ROL $15 ; HI*2 COMPLETE HI*10
A995 LDA $14
A997 ADC $07 ; ADD NEW CHAR
A999 STA $14
A99B BCC $A99F ; DID LO OVERFLOW?
A99D INC $15 ; YES, INC HI
A99F JSR $0073 ; GET NEXT CHAR
A9A2 JMP $A971 ; GO THROUGH IT AGAIN.
╘HE PROBLEM IS AT $A97D. WHEN THE PARTIAL RESULT IS GREATER THAN 6399,
(IF PARTIAL > 6399, THEN NEW PARTIAL RESULT WILL BE OVER 63999)
THE ROUTINE NEEDS TO GET TO $AF08 TO PRINT AN ERROR, BUT CAN'T DUE TO
BRANCH RESTRICTIONS. ╚OWEVER, A BRANCH THAT WILL GET THERE IS IN THE
PRECEDING FUNCTION, WHICH HANDLES THE ╧╬ ╟╧╘╧/╟╧╙╒┬ KEYWORDS ($A94B,
╧╬╟╧╘╧).
╙O, THE ┬┴╙╔├ WRITERS JUST BRANCHED TO THE CODE IN ╧╬╟╧╘╧; SPECIFICALLY
$A953:
A94B JSR $B79E
A94E PHA
A94F CMP #$8D ; IS THE KEYWORD ╟╧╙╒┬ ($8D)
A951 BEQ $A957 ; YES
A953 CMP #$89 ; IS THE KEYWORD ╟╧╘╧ ($89)
A955 BNE $A8E8 ; NO, PRINT ╙┘╬╘┴╪ ┼╥╥╧╥.
A957 ... ; HANDLE ╧╬ ╟╧╘╧/╟╧╙╒┬
╘HIS CODE IS CHECKING TO MAKE SURE THE ╧╬ (VAR) IS FOLLOWED WITH A
╟╧╘╧ OR ╟╧╙╒┬ KEYWORD.
╘HE ╠╔╬╟┼╘ ERROR HANDLER BRANCHES TO $A953, WHICH COMPARES
.┴ (WHICH HOLDS HI BYTE OF PARTIAL RESULT) TO $89. ╬ORMALLY, THIS
FAILS, AND THE NORMAL ╙┘╬╘┴╪ ┼╥╥╧╥ CODE IS REACHED THROUGH THE BRANCH
TO $A8E8. ╚OWEVER, FOR PARTIAL RESULTS OF THE FORM $89╪╪, THE CHECK
SUCCEEDS, AND ┬┴╙╔├ TRIES TO EXECUTE AN ╧╬ ╟╧╘╧/╟╧╙╒┬ CALL.
┬Y THE WAY, IT IS NO COINCIDENCE THAT THIS ERROR OCCURS ON 35072121,
SINCE ONE OF THE PARTIAL RESULTS IS $8900 (HI BYTE IS $89). ╔N FACT,
350721 WILL ACHIEVE THE SAME RESULT.
╔F THE CHECK SUCCEEDS, THE CODE LIMPS ALONG UNTIL $A96A:
A969 PLA ; COMPLEMENT TO $A94E
A96A RTS ; RETURN
┬UT WE NEVER EXECUTED $A94E, THE PUSH, SO THE STACK IS NOW
MESSED UP. ╙INCE THE STACK HELD $9E, $79, $A5 BEFORE THE ╨╠┴,
(╘HE STACK COULD HOLD OTHER VALUES, BUT ╔ ALWAYS SAW THESE)
THE ╥╘╙ GETS ADDRESS $A579 TO RETURN TO, WHICH USUALLY HOLDS A ┬╥╦
OPCODE. ╘HE BREAK HANDLER IS INVOKED, AND THE SCREEN CLEARS WITH THE
╥┼┴─┘. AT THE TOP.
╬OW, THE ┬┴╙╔├ 2.0 AUTHORS WERE JUSTIFIED IN REUSING THE ERROR
HANDLER CODE IN ╧╬╟╧╘╧ FOR ╠╔╬╟┼╘, BUT THEY CALCULATED THE BRANCH
OFFSET WRONG, ACCORDING TO MY TESTS. ╔F YOU HAVE THE ╠╔╬╟┼╘ ERROR
HANDLER BRANCH TO $A955, ALL THESE TROUBLES DISAPPEAR. ┘OU CAN
VERIFY THIS PROCEDURE WITH THE FOLLOWING ┬┴╙╔├ PROGRAM ON A 64:
10 FOR T=57344 TO 65535:POKE T,PEEK(T):NEXT
20 FOR T=40960 TO 49151:POKE T,PEEK(T):NEXT
30 POKE 43390, 214
40 POKE 1, PEEK(1) AND 254
╩UST TO BE COMPLETE, THIS ERROR OCCURS WHEN A 6 DIGIT OR GREATER LINE
NUMBER IS ENTERED AND THE FIRST 6 DIGITS INDICATE A NUMBER IN THE
RANGE 35072-35327 ($8900-$89FF). ┴LSO, IT APPEARS THE ERROR OCCURS
ON THE ╓╔├-20, BUT ╔ DIDN'T COMPLETELY VERIFY IT. ╔T WOULD BE
INTERESTING TO NOTE IF THE ERROR IS FOUND ON ALL VERSION OF ├┬═ ┬┴╙╔├.
╫HEW, WHAT A MOUTHFUL.
╤ $0┼2) ╔F A ╙╔─ CHIP IS PRODUCING A "SAWTOOTH WAVEFORM", DOES THE WAVEFORM LOOK
LIKE:
A) "/▄/▄/▄/▄" OR
B) "▄\▄\▄\▄\" ?
┴ $0┼2) A IS THE CORRECT ANSWER.
╤ $0┼3) ╧N ┬┴╙╔├ 2.0, WHAT SPECIAL PRECAUTION(S) MUST ONE TAKE WHEN WORKING WITH
RELATIVE FILES? (ONLY ONE IS NEEDED)
┴ $0┼3) ┬ECAUSE ┬┴╙╔├ 2.0 DOESN'T HANDLE POSITIONING IN RELATIVE FILES QUITE
RIGHT, ONE MUST POSITION THE RELATIVE FILE POINTER BEFORE ┴╬─ ┴╞╘┼╥
A READ OR WRITE TO A RELATIVE FILE.
╤ $0┼4) ╫HAT INCOMPATIBILITY EXISTED BETWEEN ├128 ╥EV. 0 ╥╧═╙ AND THE ╥┼╒?
┴ $0┼4) ╧╦, ╔ ADMIT IT. ╔ PLACED THIS ANSWER AND ITS DISCUSSION SOMEWHERE
IN MY STORE OF INFORMATION, AND IT MUST HAVE FALLEN BEHIND THE
CABINET, BECAUSE ╔ CANNOT FIND IT. ╔ WILL POST AN ANSWER TO THIS
AS SOON AS ╔ CAN FIND IT, BUT THE ANSWERS REALLY MUST GO OUT, AS
THEY HAVE BEEN HELD UP LONG ENOUGH.
╤ $0┼5) ╫HAT CAN TRIGGER AN ╬═╔ INTERRUPT? (COUNT ALL SOURCES ON ONE CHIP AS
ONE)
┴ $0┼5) ╘HE FOLLOWING SOURCES CAN TRIGGER AN ╬═╔ INTERRUPT:
1) ╘HE EXPANSION PORT.
2) ├╔┴ #2.
3) ╘HE ╥┼╙╘╧╥┼ KEY.
╤ $0┼6) ╫HAT CAN TRIGGER AN ╔╥╤ INTERRUPT? (COUNT ALL SOURCES ON ONE CHIP AS
ONE)
┴ $0┼6) ╘HE FOLLOWING SOURCES CAN TRIGGER AN ╔╥╤ INTERRUPT:
1) ╘HE ╓╔├-╔╔ CHIP.
2) ├╔┴ #1.
3) ╘HE EXPANSION PORT.
╤ $0┼7) ╫HERE IS THE ╥╧═ IN A 1541 LOCATED IN THE 64╦ MEMORY MAP?
┴ $0┼7) ╘HE ╥╧═ IS LOCATED FROM $├000 TO $╞╞╞╞, YET THE ╥╧═ CODE DOES NOT
BEGIN UNTIL $├100.
╤ $0┼8) ╫HICH ╓╔┴ ON THE 1541 IS HOOKED TO THE READ/WRITE HEAD?
┴ $0┼8) ╓╔┴ #2, LOCATED IN MEMORY FROM $1├00 TO $1├0┼.
╤ $0┼9) ╔N THE ├OMMODORE ─╧╙, WHAT BIT IN THE FILE TYPE BYTE DENOTES A "LOCKED"
FILE?
┴ $0┼9) BIT 6.
╤ $0┼┴) ╔F FILES ARE "LOCKED" UNDER ├OMMODORE ─╧╙, UNDER WHAT CONDITION(S) MAY
THE FILE BE CHANGED?
┴ $0┼┴) ─EPENDING ON THE FILE, THE FOLLOWING OPERATIONS CAN BE DONE ON A
LOCKED FILE:
1) ╥ENAME WILL CHANGE FILE NAME, ALTHOUGH NOT CONTENTS OF FILE.
2) ╥ANDOM ACCESS CAN BE USED TO ALTER FILE.
3) ╞ORMATTING THE DISK WILL ALTER THE FILE. (DUH!)
4) ╙AVE-WITH-REPLACE (@0:) WILL REPLACE FILE AND UNLOCK IT.
5) ╧PENING FILE IN APPEND MODE WILL ALLOW IT TO BE CHANGED, AND
UNLOCK IT.
6) ╧PENING A RELATIVE FILE AND ADDING OR CHANGING A RECORD WILL
SUCCEED AND UNLOCK FILE.
╤ $0┼┬) ╚OW BIG CAN A PROGRAM FILE BE ON A 1541 OR SIMILAR?
┴ $0┼┬) ╘HE FILE CAN BE AS LARGE AS A SEQUENTIAL FILE, SINCE BOTH ARE STORED
IN THE SAME WAY: 168656 BYTES. ╚OWEVER, SINCE A PROGRAM CONTAINS ITS
LOAD ADDRESS AS BYTES 0 AND 1, THE LARGEST PROGRAM SIZE IS 168654
BYTES.
╤ $0┼├) ╒NDER ┬┴╙╔├ 2.0, HOW DOES ONE OPEN A RANDOM ACCESS FILE ON A DISK
DRIVE?
┴ $0┼├) ╥ANDOM ACCESS (OR DIRECT ACCESS) FILES ARE A MISNOMER. ╫HAT YOU
REALLY DOING IS OPENING THE DISK FOR READING AND WRITING. ┘OU NEED
TWO OPEN COMMAND TO ACCESS A RANDOM FILE: (ASSUME DRIVE 8)
OPEN 15,8,15 AND
OPEN 1,8,4,"#1" WILL OPEN A RANDOM ACCESS FILE USING BUFFER 1.
OPEN 1,8,4,"#" WILL OPEN A RANDOM ACCESS FILE USING THE FIRST
AVAILABLE BUFFER
╬OW, BY USING ┬-╥, ┬-╫, ┬-┴ OR THEIR REPLACEMENTS, YOU CAN WRITE
DATA TO SECTORS ON THE DISK.
╬OTE THAT ╥ANDOM ACCESS FILES ARE DIFFERENT FROM RELATIVE FILES.
╤ $0┼─) ┴ FILE THAT HAS A '*' IMMEDIATELY BEFORE THE FILETYPE IS CALLED
A _________ FILE.
┴ $0┼─) A SPLAT FILE. ╘HIS IS ITS CORRECT TERM, BELIEVE IT OR NOT.
╤ $0┼┼) ╫E KNOW THE 1541 AND SIMILAR DRIVES HAVE 5 INTERNAL BUFFER AREAS, BUT
HOW MANY DOES AN 8050 DRIVE HAVE?
┴ $0┼┼) ╙INCE THE 8050 HAS TWICE THE ON-BOARD ╥┴═ (4K┬), IT HAS 16 BUFFERS, BUT
ONLY 13 ARE AVAILABLE. (┴LL ├┬═ DRIVES USE ONE BUFFER FOR ZERO-PAGE
MEMORY, ONE FOR STACK MEMORY, AND ONE FOR TEMPORARY VARIABLES.)
╤ $0┼╞) ╧N A "SAVE-WITH-REPLACE", WHERE IS THE LOCATION OF THE FIRST TRACK AND
SECTOR OF THE NEW COPY OF THE PROGRAM SAVED IN THE DIRECTORY ENTRY FOR
THE OLD COPY?
┴ $0┼╞) ╘HE NEW FIRST TRACK IS STORED AT LOCATION 26, AND THE NEW FIRST SECTOR
IS STORED AT LOCATION 27. ╘HESE VALUES ARE COPIED TO THEIR
CORRECT LOCATIONS AFTER THE SAVE IS COMPLETED.
╚ERE ARE THE ANSWERS TO ├OMMODORE ╘RIVIA ┼DITION #16 FOR ═ARCH, 1995
╤ $0╞0) ╫HAT SIZE MATRIX OF PIXELS COMPRISES A CHARACTER ON A ╨┼╘ 2001
COMPUTER?
┴ $0╞0) ╘HE MATRIX WAS 8 BY 8.
╤ $0╞1) ╚OW MANY BYTES DID THE OPENING SCREEN ON A ├┬═ 4016 SHOW AS
AVAILABLE FOR USE BY ┬┴╙╔├?
┴ $0╞1) 15359 BYTES FREE.
╤ $0╞2) ╘HE CHARACTER SET THAT PRODUCES UPPERCASE LETTERS ON UNSHIFTED KEYS
IS THE ________________ CHARACTER SET.
┴ $0╞2) "STANDARD MODE".
╤ $0╞3) ╘HE CHARACTER SET THAT PRODUCES LOWERCASE LETTERS ON UNSHIFTED KEYS
IS THE ________________ CHARACTER SET.
┴ $0╞3) "ALTERNATE MODE"
╤ $0╞4) ╘O GET TO THE SET MENTIONED IN $╞2, WHAT CHARACTER CODE WOULD BE
PRINTED TO THE SCREEN?
┴ $0╞4) CHR$(142)
╤ $0╞5) ╫HAT CHARACTER CODE WOULD ONE PRINT TO THE SCREEN TO INVOKE THE
CHARARACTER SET IN $╞3?
┴ $0╞5) CHR$(14)
╤ $0╞6) ╔F ONE DOES ╠╔╙╘ 60-100, WILL LINE 100 GET "LISTED"?
┴ $0╞6) ┘ES. ╘HE ABOVE TRANSLATES AS: ╠╔╙╘ 60 THROUGH TO AND INCLUDING 100.
╤ $0╞7) ╘HE ABBREVIATION FOR THE ┬┴╙╔├ 4.0 COMMAND "├╧╠╠┼├╘" IS ________.
┴ $0╞7) CO╠. "├" "╧" "╙╚╔╞╘-╠". ╞OR THOSE WHO ARE INTERESTED, THE
├╧╠╠┼├╘ COMMAND IS ANALOGOUS TO THE ╓┴╠╔─┴╘┼ OPERATION.
╤ $0╞8) ╫HEN YOU USE A SUBSCRIPTED VARIABLE IN ┬┴╙╔├, HOW MANY ELEMENTS
ARE CREATED BY DEFAULT IF NO ─╔═ STATEMENT IS ISSUED?
┴ $0╞8) 11 ELEMENTS. ┴(0) - ┴(10). ┴LMOST EVERYONE WHO HAS EVER PROGRAMMED
IN ├OMMODORE ┬┴╙╔├ HAS SEEN THE "┬┴─ ╙╒┬╙├╥╔╨╘" ERROR WHEN THEY TRY
TO USE THE 12TH ELEMENT IN A UN-─╔═ENSIONED ARRAY.
╤ $0╞9) ╚OW LARGE IS THE KEYBOARD BUFFER IN ├┬═ COMPUTERS?
┴ $0╞9) 10 BYTES. ╙INCE THIS AREA COULD BE ╨╧╦┼D TO, MANY BOOT PROGRAMS
WOULD POKE CHARACTERS INTO THIS BUFFER TO SIMULATE KEYPRESSES.
╤ $0╞┴) ╧N THE ├OMMODORE 1581, HOW LARGE IS A PHYSICAL SECTOR IN BYTES?
┴ $0╞┴) ┴ PHYSICAL SECTOR IS 512 BYTES IN LENGTH. ╔NTERNALLY, THE 1581
CREATES 2 256 "LOGICAL" SECTORS IN A PHYSICAL SECTOR, TO MAINTAIN
COMPATIBILITY WITH OLDER ├OMMODORE DRIVES.
╤ $0╞┬) ┘OU'LL FIND ┬┴╙╔├ 3.5 ON THE _____________ LINE OF ├┬═ COMPUTERS.
┴ $0╞┬) ╘HE ╪64 SERIES. ╘HAT INCLUDES THE ├OMMODORE 16, THE ├OMMODORE 116,
AND THE ├OMMODORE ╨LUS/4.
╤ $0╞├) ╧N THE ├OMMODORE 1351 MOUSE, WHAT REGISTERS IN THE ├OMMODORE
COMPUTER WOULD THE ╪ AND ┘ PROPORTIONAL INFORMATION BE READ
FROM?
┴ $0╞├) ┼VEN THOUGH YOU ARE LOOKING FOR DIGITAL INFORMATION (HOW FAR THE
MOUSE HAS TRAVELED SINCE THE LAST MOVEMENT IN A PARTICULAR AXIS),
THE INFORMATION IS READ FROM THE "PADDLE" OR POTENTIOMETER (╨╧╘)
REGISTERS. ╧N THE ├64, THE ╨╧╘ REGISTERS ARE PART OF THE ╙╔─
CHIP, AND ARE AT 54297 ($─419) FOR ╨╧╘╪, AND 54298 ($─41┴) FOR
╨╧╘┘.
╤ $0╞─) ╫HAT IS THE MAXIMUM SIZE OF A SEQUENTIAL FILE ON A 1581 DRIVE?
┴ $0╞─) 802640 BYTES.
╤ $0╞┼) ╫HAT FLAW EXISTS IN THE EARLY ├OMMODORE 1670 MODEMS?
┴ $0╞┼) ╫HEN THE 1670 MODEM WAS FIRST INTRODUCED, IT POWERED UP IN AUTO-
ANSWER MODE, WHICH MEANS IT WOULD ANSWER INCOMING CALLS AFTER
THE PHONG RANG. ┘OU COULD TURN THIS FEATURE OFF THROUGH SOFTWARE
CONTROL, BUT IF THE POWER WAS RESET, THE MODEM WOULD ANSWER THE
PHONE. ╙O MANY PEOPLE COMPLAINED TO ├OMMODORE THAT ├┬═ REVISED
THE 1670 TO INCLUDE AN EXTRA ─╔╨ SWITCH THAT TURNED THIS FEATURE
OFF.
╤ $0╞╞) ╫HAT IS THE MODEL NUMBER OF THE FIRST MODEM FOR THE ╓╔├ AND ├64?
┴ $0╞╞) ╘HE 1600 MANUAL DIAL/MANUAL ANSWER 0-300 BPS MODEM. ╘HE AUTHOR
OWNS ONE, AND USED IT FOR MANY YEARS. ╘O OPERATE, YOU MUST USE
A PHONE WITH A DETACHABLE HANDSET CORD. ┘OU DIALED THE NUMBER
ON THE PHONE, WAITED FOR THE ANSWER, UNPLUGGED THE HANDSET, AND
PLUGGED THE CORD INTO THE 1600. ┴ SWITCH TOGGLED BETWEEN USING
ORIGINATE OR ANSWER FREQUENCIES. ╘HE 1600 WAS MANUFACTURED BY
┴NCHOR ┴UTOMATION FOR ├OMMODORE. (┴S AN ASIDE, THIS UNIT CLAIMED
300 BPS, BUT ╔ NEVER COULD GET 300 TO WORK WELL. ═OST OF MY
TELECOMMUNICATIONS HAPPENED AT 150 BPS.)
-------├OMMODORE ╘RIVIA ┼DITION #17 ╤UESTIONS AND ┴NSWERS (┬┼╟╔╬)--------
╤ $100) ╧N THE ═╧╙ ╘ECHNOLOGY'S ╦╔═-1, HOW MANY KEYS WERE ON THE KEYPAD?
┴ $100) 23 KEYS. ╘HE KEYPAD HAS ROOM FOR 24, BUT ONE SPOT IS TAKEN BY
A SWITCH THAT PUTS THE SYSTEM INTO SINGLE-STEP MODE. ╔NTERESTINGLY,
SOME PICTURES HAVE THE SWITCH ON THE UPPER LEFT, SOME ON THE UPPER
RIGHT.
╤ $101) ╘HE ╦╔═-1 KEYPAD HAD THE COMMON 0-9┴-╞ KEYS ON THE KEYPAD, BUT
ALSO HAD SOME SPECIAL KEYS. ╬AME THEM.
┴ $101) ╟╧ (╟O) ┼XECUTES AN INSTRUCTION AND DISPLAYS THE ADDRESS OF NEXT,
╙╘ (╙TOP) ╙TOPS EXECUTION OF PROGRAM AND RETURN CONTROL TO MONITOR,
╥╙ (╥ESET),
┴─ (┴DDRESS) ┴DDRESS ENTRY MODE,
─┴ (─ATA) ─ATA ENTRY MODE,
╨├ (╨ROGRAM ├OUNTER) ─ISPLAYS AND RESTORES PROGRAM COUNTER TO VALUES
IN ╨├╠ AND ╨├╚,
+ (╔NCREMENT) ╔NCREMENTS THE ADDRESS WITHOUT CHANGING THE ENTRY MODE.
╤ $102) ╘HE ╦╔═-1 WAS A SET OF MODULES THAT COULD BE PLUGGED TOGETHER TO
EXPAND THE SYSTEM. ┼ACH MODULE HAD A MODEL NUMBER. ╫HAT WAS THE
MODEL NUMBER OF THE ╦╔═-1 MOTHERBOARD?
┴ $102) ╘HE ╦╔═-4.
╤ $103) ╧N THE 1525 LINE OF PRINTERS, IF YOU WANTED TO CREATE THE FOLLOWING
GRAPHIC, WHAT BYTES WOULD YOU SEND TO THE PRINTER AFTER TURNING ON
GRAPHICS MODE?
****
* *
* *
* *
* *
* *
****
┴ $103) ╔ GUESS ╔ SHOULD HAVE STIPULATED THAT THIS IS A BITMAP. ┴╙├╔╔ JUST
HAS A FEW LIMITATIONS. ┴NYWAY, THE CORRECT BYTES TO SEND ARE:
255, 193, 193, 255. ┘OU GOT THESE BY ASSIGNING EACH BIT IN A COLUMN
A VALUE, AND ADDING 128 TO THE RESULT FOR EACH COLUMN.
╤ $104) ╫HAT IS THE HORIZONTAL RESOLUTION OF THE 1525 LINE OF PRINTERS?
┴ $104) ├HARACTER RESOLUTION: 80 CHARS, OR 10 CHARS/INCH (CPI).
╟RAPHICS RESOLUTION: 480 DOTS, OR 60 DOTS/INCH (DPI).
╤ $105) ╧N ├OMMODORE DRIVES, EXPLAIN THE DIFFERENCE BETWEEN THE ┬-╥ COMMAND
AND THE ╒1 COMMAND.
┴ $105) ╘HE TWO COMMANDS READ IN DATA FROM A DISK SECTOR. ╚OWEVER, THE
╒1 COMMAND ALWAYS READS A FULL SECTOR (255 BYTES). ╘HE ┬-╥
COMMAND READS THE NUMBER OF BYTES SPECIFIED IN THE FIRST BYTE OF
THE SECTOR. ╔F THE FIRST BYTE IS A 15, ┬-╥ WILL READ 15 BYTES
FROM THE SECTOR. (╞ROM THE 1581 MANUAL)
╤ $106) ╧N THE ├OMMODORE 1541 DRIVE, WHAT DOES THE ╒: COMMAND DO?
┴ $106) ╘HIS COMMAND HAS BEEN TRADITIONALLY USED TO RESET ├OMMODORE DRIVES,
INCLUDING THE ├┬═ 1541. ╚OWEVER, SOME EARLY VERSIONS OF THE ─RIVE
─╧╙ DID NOT CORRECTLY HANDLE THIS COMMAND. ╔N THESE VERSIONS, THE
DRIVE AND COMPUTER FAILED TO COMPLETE THE COMMAND TRANSACTION
SUCCESSFULLY, AND WHAT LOOKED LIKE A HUNG MACHINE RESULTED.
├OMMODORE LATER FIXED THIS PROBLEM. ╔F ╒: SEEMS TO NOT WORK ON
YOUR DRIVE, TRY ╒; INSTEAD.
╤ $107) ╫HAT DOES THE FIRST ROUTINE IN THE 1541 DRIVE ╥╧═ ACTUALLY DO?
┴ $107) ╘HE FUNCTION, CALLED ╙┼╘╠─┴ AND RESIDING AT $├100, TURNS ON THE
DRIVE ACTIVE ╠┼─ FOR THE CURRENT DRIVE. ╘HE ROUTINE LOADS THE
CURRENT DRIVE FROM $7╞ AND SETS BIT 3 OF ─╙╦├╬╘ ($1├00).
╤ $108) ╚OW MANY FILES WILL A 1581 DISK DRIVE HOLD?
┴ $108) 296 FILES. ╬OTE THAT IT IS NOT A MULTIPLE OF 144.
╤ $109) ├OMMODORE 1581 DRIVES HAVE A SPECIAL "AUTOBOOT" FEATURE THAT ENABLES
THE DRIVE TO LOAD AND RUN A PROGRAM OFF A DISK UPON DRIVE BOOTUP.
╫HAT IS THE REQUIRED NAME OF THE FILE?
┴ $109) ├╧╨┘╥╔╟╚╘ ├┬═ 86
╤ $10┴) ╫HAT FILETYPE MUST THE FILE MENTIONED IN $109 BE?
┴ $10┴) ╒╙╥.
╤ $10┬) ╘O POWER UP A 1351 MOUSE IN "JOYSTICK MODE", WHAT MUST THE USER DO?
┴ $10┬) ╔F ONE DEPRESSES THE RIGHT MOUSE BUTTON DURING POWER-UP, THE 1351
WILL BEHAVE JUST LIKE A JOYSTICK.
╤ $10├) ─ESCRIBE THE CONTENTS OF THE ╨╧╘╪ OR ╨╧╘┘ REGISTERS WHEN USING A
1351 MOUSE.
┴ $10├) ┼ACH REGISTER HOLDS THE SAME TYPE OF INFORMATION, JUST FOR A
SEPARATE AXIS, SO WE WILL DESCRIBE JUST ONE REGISTER:
┬IT: ╞UNCTION
7 ─ON'T CARE
6-1 ═OUSE AXIS POSITION MOD 64.
0 ╬OISE ┬IT. (CHECK THIS BIT TO SEE WHETHER MOUSE HAS MOVED)
╤ $10─) ├OMMODORE COMPUTERS TYPICALLY USE MOST OF ZERO PAGE FOR TEMPORARY
VARIABLES AND OTHER ITEMS. ╚OWEVER, BOTH THE ╓╔├-20 AND THE 64
RESERVE 4 BYTES FOR USER PROGRAMS THAT NEED ZERO PAGE MEMORY. ╫HERE
ARE THESE LOCATIONS?
┴ $10─) $╞┬-$╞┼ (251-254). ╔ AM NOT SURE THESE WERE "RESERVED" FOR
PROGRAMMERS AS MUCH AS THEY WERE JUST NOT UTILIZED BY THE
├┬═ PROGRAMMERS.
╤ $10┼) ╬AME THE 16 COLORS AVAILABLE ON THE 64.
┴ $10┼) ┬LACK
╫HITE
╥ED
├YAN (╠IGHT ┬LUE-╟REEN)
╨URPLE
╟REEN
┬LUE
┘ELLOW
╧RANGE
┬ROWN
╠IGHT ╥ED
─ARK ╟RAY (╟RAY 1)
═EDIUM ╟REY (╟RAY 2)
╠IGHT ╟REEN
╠IGHT ┬LUE
╠IGHT ╟RAY (╟RAY 3)
╤ $10╞) ┬OTH THE ╓╔├-20 AND THE ├64 EMULATE THE OPERATION OF THE 6551 ╒┴╥╘.
╚OW MANY "MOCK 6551" REGISTERS ARE MAPPED INTO THE MEMORY MAP?
┴ $10╞) 5, FROM $293-$297 (659-663). ╘HE REGISTER CONTENTS:
$293 6551 ├ONTROL ╥EGISTER
$294 6551 ├OMMAND ╥EGISTER
$295-6 6551 ╒SER ─EFINED ┬AUD ╥ATE VALUE.
$297 6551 ╙TATUS ╥EGISTER
------------├OMMODORE ╘RIVIA ┼DITION #18 ╤UESTIONS (┬┼╟╔╬)--------------
╤ $110) ╫HAT IS THE NAME OF THE COMPANY THAT RECENTLY PURCHASED THE
LIQUIDATED ├OMMODORE ASSETS?
╤ $111) ┴T ONE TIME, ├OMMODORE ATTEMPTED TO MANUFACTURE A DUAL DRIVE
VERSION OF THE 1571 CALLED THE 1572. ╞OR WHAT TECHNICAL REASON
DID IT UTIMATELY FAIL?
╤ $112) ╧VER WHAT COMPUTER SYSTEM DID A ╒SER ╟ROUP SUE ├OMMODORE AND WIN?
╤ $113) ╔N $103, THE QUESTION ASKED HOW TO CREATE A GRAPHIC OF A SMALL BOX
ON THE 1525. ╔N THIS QUESRTION, WE HAVE MADE A DIFFERENT DESIGN.
╔F YOU WANTED TO CREATE THE FOLLOWING GRAPHIC USING INDIVIDUAL
DOTS ON THE PRINTER, WHAT BYTES WOULD YOU SEND TO THE PRINTER AFTER
TURNING ON GRAPHICS MODE?
** * *
* ***
* ** ***
* * * * *
** ** * *
* *
**
╤ $114) (╙OME ├65 QUESTIONS) ╚OW MANY ╙╔─ CHIPS DOES THE THE DEVELOPMENT
├OMMODORE 65 MACHINE CONTAIN?
╤ $115) ╫HAT ├╨╒ DOES THE ├OMMODORE 65 USE?
╤ $116) ╫HAT IS THE ALTERNATE NAME FOR THE ├OMMODORE 65?
╤ $117) ╚OW MANY PROCESSORS DOES THE INTERNAL 1581-COMPATIBLE DRIVE
ON THE ├65 CONTAIN?
╤ $118) ╔N THE TRADITION OF NAMING CERTIAN ╔├S AFTER FAMOUS CARTOON
CHARACTERS, ONE OF THE ╔├S IN THE ├65 IS NAMED AFTER A ╫ARNER
┬ROTHERS CARTOON CHARACTER. ╫HICH ONE?
╤ $119) ╫HAT VERSION OF ┬┴╙╔├ IS INCLUDED ON THE ├OMMODORE 65 IN ├65 MODE?
╤ $11┴) ╚OW MANY ╔/╧ PORTS DOES A ├OMMODORE 65 CONTAIN?
╤ $11┬) ╫HAT COMMON ├OMMODORE 64 ╔/╧ PORT DOES THE ├65 ╬╧╘ HAVE?
╤ $11├) ╚OW MANY FUNCTION KEYS ARE ON A ├OMMODORE 65?
╤ $11─) ╫HAT ├┬═ DISK DRIVE ─╧╙ WAS USED AS THE TEMPLATE FOR THE INTERNAL
├65 DRIVE ─╧╙?
╤ $11┼) ╫HAT RESOLUTION OF TEXT SCREEN DOES THE ├65 POWER UP IN? (╨LEASE
GIVE ANSWERS IN CHARACTERS).
╤ $11╞) ╫HAT DISTINGUISHING NON-TEXTUAL CHARACTERISTIC IN THE ├65 IS NOT
PRESENT IN OTHE ├OMMODORE 8-BIT COMPUTERS?
╘HE INFORMATION IN THIS BETWEEN THE LINES MARKED BY (┬┼╟╔╬) AND (┼╬─)
IS COPYRIGHT 1995 BY ╩IM ┬RAIN. ╨ROVIDED THAT THE INFORMATION
BETWEEN THE (┬┼╟╔╬) AND (┼╬─) LINES IS NOT CHANGED EXCEPT TO CORRECT
TYPOGRAPHICAL ERRORS, THE SO MARKED COPYRIGHTED INFORMATION MAY BE
REPRODUCED IN ITS ENTIRETY ON OTHER NETWORKS OR IN OTHER MEDIUMS. ╞OR
MORE INFORMATION ABOUT USING THIS FILE, PLEASE CONTACT THE ADDRESS
SHOWN BELOW.
╩IM ┬RAIN
BRAIN@MAIL.MSEN.COM
602 ╬ORTH ╠EMEN
╞ENTON, ═╔ 48430
(810) 737-7300 X8528
╙OME ARE EASY, SOME ARE HARD, TRY YOUR HAND AT:
├OMMODORE ╘RIVIA #18!
========================================================================
┬╞╠╔ - ╬EW GRAPHICS MODES 2
BY ╨ASI '┴LBERT' ╧JALA <ALBERT@CS.TUT.FI>
╧NE DAY ╔ WAS WATCHING SOME DEMOS THAT USED LINECRUNCH ROUTINES FOR
WHOLE-SCREEN MULTICOLOR-GRAPHICS UPSCROLLERS. ╔ ALREADY HAD MY
THEORIES ABOUT HOW AND WHY LINECRUNCH WORKED, BUT BECAUSE ╔ HAD NOT
USED IT ANYWHERE, THE DETAILS WERE A BIT VAGUE. ╔N FACT, ╔ HAVE
MANY TIMES ACCIDENTALLY CREATED LINECRUNCH EFFECTS WHEN TRYING TO DO
SOMETHING ELSE WITH $─011. ╨ROBABLY EVERY DEMO CODER HAS.
┬UT YOU LEARN BY DOING. ╔ HAD THE IDEA OF USING LINECRUNCH FOR ╞╠╔
INSTEAD OF A SIMPLE MULTICOLOR PICTURE AS IT ALWAYS SEEMED TO BE
USED. ╚OWEVER, THIS HAS PROBABLY BEEN DONE BEFORE AND BECAUSE ╔
DON'T LIKE TO DO THINGS THAT HAVE BEEN DONE BEFORE, ╔ DECIDED TO USE
LINECRUNCH TO SHOW A TWO-SCREEN-TALL ╞╠╔ PICTURE.
_╠INECRUNCH ┬ASICS_
╞OR THOSE NOT FAMILIAR WITH LINECRUNCH ROUTINES: LINECRUNCH IS USED
TO SCROLL THE SCREEN ╒╨╫┴╥─╙ BY CONVINCING ╓╔├-╔╔ THAT IT HAS
ALREADY SHOWED MORE CHARACTER ROWS THAN IT IN REALITY HAS SHOWN.
╙URPRISINGLY (OR THEN, MAYBE NOT :) THIS CONSISTS OF FIDDLING WITH
$─011. ╘HE TIMING IS CRITICAL AS ALWAYS.
╠INECRUNCH WORKS BY SETTING $─011 EQUAL THE LINE BEFORE THE CURRENT
LINE AND ╓╔├-╔╔ WILL HAPPILY THINK THAT IT IS TIME TO MOVE ON TO THE
NEXT CHARACTER ROW - ADD 40 TO THE VIDEO MATRIX COUNTER, 320 TO THE
GRAPHICS MEMORY COUNTER AND BE READY TO START A BAD LINE. ╧R, MAYBE
'╬╧╘ TO GO BACK TO THE CURRENT ROW' WOULD BE A MORE SUITABLE
DESCRIPTION. (╨ROGRAMMING ╓╔├-╔╔ IS SLOWLY BECOMING A SCIENCE.)
╘HE REQUIRED TIMING ALSO DOES NOT CAUSE BAD LINES SO THAT YOU CAN
SKIP ANOTHER LINE IMMEDIATELY ON THE SUCCESSIVE LINE. ╔N ADDITION,
LINES CAN BE SKIPPED ONLY AFTER THE FIRST CHARACTER ROW AND HALF OF
THE SECOND CHARACTER ROW HAVE BEEN DISPLAYED. ╘HIS HAS SOMETHING TO
DO WITH THE WAY ╓╔├-╔╔ DECIDES WHEN THERE IS A BAD LINE.
┬ECAUSE LINECRUNCH CAUSES ╓╔├-╔╔ TO SKIP ROWS, IT WILL RUN OUT OF
VIDEO MATRIX AND COLOR MEMORY (AND GRAPHICS MEMORY) BEFORE REACHING
THE END OF THE SCREEN. ╚OWEVER, ╓╔├-╔╔ DOES NOT STOP DISPLAYING THE
GRAPHICS NOR DOES IT RESET THE INTERNAL COUNTERS. ╘HE COUNTERS KEEP
ON RUNNING AND WRAP AROUND INSTEAD.
╬ORMALLY, WHEN ╓╔├-╔╔ IS DISPLAYING THE LAST CHARACTER ROW, IT IS
SHOWING THE MEMORY FROM OFFSETS $3C0 TO $3E7. ╔F ╓╔├-╔╔ HAS SKIPPED
ONE CHARACTER ROW, IT IS DISPLAYING FROM $3E8 TO $40F INSTEAD. ┬UT,
THERE ARE ONLY 10 BITS FOR THE VIDEO MATRIX COUNTER (0..1023), SO IT
WRAPS AROUND TO ZERO AFTER $3FF. ╘HIS MEANS THAT THE BEGINNING OF
THE VIDEO MATRIX IS DISPLAYED AT THE BOTTOM OF THE SCREEN. ╘HE
CHARACTER ROWS BECOME SHIFTED BY 24 CHARACTER POSITIONS TO THE RIGHT
BECAUSE THERE WERE ORIGINALLY 24 UNUSED MEMORY LOCATIONS AT THE END
OF THE MEMORY (1000..1023). (╘O BE HONEST, SPRITE IMAGE POINTERS
ARE NOT UNUSED MEMORY, BUT THEY ARE NOT USED WITH NORMAL ╞╠╔.)
____________________ ____________________
▄ABCDEFGHIJKLMNOPQRST▄ ▄ABCDEFGHIJKLMNOPQRST▄
▄ ▄ ▄--------------------▄ <- ╙KIPPED ROW
: : : :
: : : :
: : : :
▄ ▄ ▄NORMALLY LAST LINE ▄
▄NORMALLY LAST LINE ▄ ▄╪╪╪╪╪╪╪╪┌┌┌┌ABCDEFGH▄
└--------------------' └--------------------'
╪ = UNUSED MEM (1000..1015)
┌ = SPRITE POINTERS (1016..1023)
╞IGURE 1: ╠INECRUNCH
╘HE SAME THING HAPPENS FOR COLOR MEMORY BECAUSE IT USES THE SAME
COUNTER FOR ADDRESSING THE MEMORY (IN FACT, COLOR MEMORY ACCESS AND
CHARACTER DATA ACCESS ARE PERFORMED SIMULTANEOSLY, 12 BITS AT A
TIME). ╘HE GRAPHICS MEMORY BEHAVES THE SAME WAY, EXCEPT THAT THE
COUNTER HAS THREE BITS MORE AND IT COUNTS AT EIGHT TIMES THE SPEED,
SO THAT IT WRAPS AT THE EXACT SAME TIME AS THE OTHER COUNTER.
╘HE FIRST CHARACTER ROW CAN'T BE USED FOR LINECRUNCH AND THE SECOND
ONE IS ALSO LOST IN THE PROCESS. ╘HE FIRST USABLE LINE TO DISPLAY
IS THE THIRD CHARACTER ROW. ╚OWEVER, THOSE TWO LOST ROWS CAN STILL
BE USED AS AN EXTENSION AT THE END OF THE FIRST SCREEN. ┘OU MUST
NOTICE, HOWEVER, THAT THE ALIGNMENT HAS BEEN CHANGED. ┴FTER THESE
TWO ROWS HAVE BEEN DISPLAYED, THE VIDEO BANK IS SWITCHED TO GET NEW
FRESH DATA ON THE SCREEN.
_┬ACK TO ┬╞╠╔_
╫RAPPED DATA IS NOTHING DIFFICULT TO WORK WITH. ╔T IS JUST THE
MATTER OF WRITING THE RIGHT CONVERSION PROGRAM. ┴LSO, THE NORMAL
╞╠╔ ROUTINE CAN BE USED, WE JUST HAVE TO MAKE SURE ╓╔├ ALWAYS HAS
THE RIGHT BANK VISIBLE - SIMPLE ╠─┴ BANK,X:STA $──00 CAN ACCOMPLISH
THAT. ╘HE MORE DIFFICULT ASPECT IS TO MAKE THE DISPLAY FREELY
LOCATABLE. ╫E HAVE 32 KILOBYTES OF GRAPHICS DATA, THIS IS THE MAIN
REASON WE CAN'T EVEN THINK ABOUT USING COPYING. ╠INECRUNCH COMBINED
WITH THE BAD LINE DELAYING TECHNIQUE WILL DO THE JOB MUCH MORE
NICELY.
╞IGURE 2 SHOWS THE PRINCIPLES. ╘O MAKE THINGS SIMPLER ╔ HAVE CHOSEN
LOCATION 0 TO MEAN THAT THE TOP OF THE PICTURE IS VISIBLE, 1 MEANS
THAT THE PICTURE IS SCROLLED ONE LINE UPWARDS AND SO ON. ╫E CAN SEE
THAT LINECRUNCH IS NOT USED AT ALL FOR THE LOCATION 0. ╘O MAKE THE
PICTURE START AT THE SAME POINT WHETHER LINECRUNCH HAS CRUNCHED
LINES OR NOT WE COMPENSATE THE NON-LOST RASTER LINES BY DELAYING THE
NEXT BAD LINE. ╫HEN THE LOCATION IS N*8 (N=0,1,2..), THE SUM OF THE
LINECRUNCHED AND DELAYED LINES IS CONSTANT - THE GRAPHICS DISPLAY
ALWAYS STARTS AT THE SAME POINT.
╘HEN HOW DO WE DEAL WITH THE LOCATION VALUES THAT ARE NOT EVENLY
DIVIDABLE BY EIGHT ? ╬OW, LETS ASSUME THAT THE LOCATION IS ╠, AND
WE HAVE ├, WHICH IS THE LOCATION DIVIDED BY EIGHT (├ = ╠/8), AND ╥,
WHICH IS THE REMAINDER (╥ = ╠%8). ╘O MAKE THE PICTURE SCROLL TO THE
RIGHT POSITION, WE NEED TO DELAY THE BAD LINE LESS THAN BEFORE - ╥
LINES LESS FOR LOCATION ╠ THAN FOR LOCATION ├*8. ┼.G. FOR LOCATION
2 WE DELAY THE BAD LINE TWO LINES LESS THAN FOR LOCATION 0. ╘HIS
ALSO SHOWS THAT WE NEED 7 LINES MORE THAN IS NEEDED FOR TO
COMPENSATE FOR THE LINECRUNCH.
─ETERMINING THE NUMBER OF LINECRUNCH LINES IS A RECURSIVE PROCESS,
BECAUSE WHEN YOU USE MORE LINECRUNCH LINES, THAT DECREASES THE
NUMBER OF LINES YOU HAVE AVAILABLE FOR THE DISPLAY AND YOU NEED
BIGGER RANGE FOR THE LOCATION VALUE. ╘HE LINECRUNCH CAN BE STARTED
AFTER 12 LINES, AND WE NEED AT LEAST 7 LINES TO USE THE SOFT
Y-SCROLL. ╘HIS MAKES 181 LINES AVAILABLE FOR THE DISPLAY
ORIGINALLY.
┬ECAUSE WE NEED TO SHOW 400 LINES OF GRAPHICS, WE WOULD NEED
(400-181)/8=28 LINECRUNCH LINES. ╚OWEVER, THIS IN TURN REDUCES THE
NUMBER OF LINES WE HAVE FOR GRAPHICS TO 181-28=153 AND WE NEED
(400-153)/8=31 LINECRUNCH LINES. ┴GAIN, 181-31 IS 150. ╫E GET
(400-150)/8=32 AND THERE IT FINALLY CONVERGES AND WE HAVE 149 LINES
FOR GRAPHICS, WHICH MAKES LOCATION VALUES 0..251 VALID.
╠OCATION 0 1 2 .. 8 9 .. 251
___________________.. ___________.. ________
___________________.. ___________.. ________
╠INECRUNCH -------------------.. ___________..
^ ^ ^
▄ ▄ ▄ ^ ^
▄ ▄ ▄ ▄ ▄
┬AD LINE DELAYED▄ ▄ ▄ ▄ ▄
▄ ▄ ▄ ▄ ▄ ========
▄ ▄ V ▄ ▄ 244
▄ V ___.. ▄ V :
V ________0 V ___.. :
╟FX ┼NABLED ________0_______1__.. ________8__.. 250_____
0 1 2 8 9 251
1 2 3 9 10 252
2 3 4 10 11 253
3 4 5 11 12 254
4 5 6 12 13 255
5 6 7 13 14 256
6 7 8 14 15 257
7 8 9 15 16 258
: : : : : :
: : : : : :
148 149 150.. 156 157.. 399
╞IGURE 2: ╠INECRUNCH AND ─═┴ DELAY IN ┬╞╠╔
(╟RAPHICS LINES NOT IN SCALE)
_├LIPPING ADDED_
╬OW WE CAN SCROLL THE PICTURE TO ANY LOCATION WE WANT, BUT THE TOP
OF THE PICTURE IS NOT CLIPPED AND IT IS VERY ANNOYING TO WATCH. ╫E
NEED TO ENABLE THE GRAPHICS AT THE SAME POINT REGARDLESS OF THE
Y-SCROLL VALUE. ╘HE ANSWER IS IN THE EXTENDED COLOR MODE (┼├═).
╫HEN BOTH ┼├═ AND MULTICOLOR MODE (═├═) ARE SELECTED, ╓╔├-╔╔ WILL
TURN THE DISPLAY TO BLACK. ╘HIS IS BECAUSE THERE IS A CONFLICTING
SITUATION AND IT JUST CAN'T DECIDE WHICH COLOR SCHEME TO USE. ╘HE
VIDEO ACCESSES WILL CONTINUE TO HAPPEN JUST LIKE BEFORE, THE DATA IS
JUST NOT DISPLAYED. ╫HEN THE ┼├═ BIT IS CLEARED AGAIN, THE NORMAL
MULTICOLOR GRAPHICS IS SHOWN.
╙O, WE SET THE ┼├═ BIT AND START TO DISPLAY THE FIRST EIGHT LINES OF
THE ╞╠╔. ┬ECAUSE THE ╞╠╔ ROUTINE ALREADY WRITES TO $─011, WE JUST
MAKE SURE THE ┼├═ BIT IS SET IN THE FIRST ╥ NUMBER OF WRITES TO
$─011 AND ZERO IN ALL OTHER.
╘HE VIEWER IS NOW 'COMPLETE'. ┘OU CAN TAKE A LOOK AT THE CODE BELOW
OR YOU CAN GET ├64╟FX1_4.LHA AND SEE IT IN ACTION YOURSELF AND NOT
JUST RELY ON MY WORD. ╘HE PACKAGE INCLUDES CONVERTER PROGRAMS FOR
┬╞╠╔, ╞╠╔ AND ╦OALA (┴╬╙╔-├), COUPLE OF EXAMPLE PICTURES AND VIEWERS
FOR ╨┴╠ AND ╬╘╙├ MACHINES.
-╨ASI '┴LBERT' ╧JALA ALBERT@CS.TUT.FI
--------------------------------------------------------------------------
┬╞╠╔ VIEWER PROGRAM FOR ╨┴╠ MACHINES
╒╨╧╙ = $├00 ; TEMPORARY AREA FOR TABLES
┬┴╬╦ = $─00 ; ╒╨╧╙ FOR LINECRUNCH, ┬┴╬╦ FOR ╞╠╔ BANK SELECT
╥┴╙╘┼╥ = 29 ; WHERE TO POSITION THE SPRITE -> ╔╥╤ 20 LINES LATER
─╒══┘ = $╞╞╞ ; DUMMY LOCATION FOR TIMING PURPOSES
╞╠╔╙┌ = 19-1 ; VISIBLE ╞╠╔ SIZE IN CHARACTER ROWS - 1
*= $810
╙┼╔
╠─┴ #$7╞:╙╘┴ $─├0─ ; ╔╥╤ SETUP
╠─┴ #1:╙╘┴ $─01┴
╙╘┴ $─015:╙╘┴ ╦┼┘╫+1
╠─┴ #<╔╥╤:╙╘┴ $314
╠─┴ #>╔╥╤:╙╘┴ $315
╠─┴ #╥┴╙╘┼╥:╙╘┴ $─001:├╠├:┴─├ #20:╙╘┴ $─012
╠─┴ #0:╙╘┴ $─017
╠─┴ #0:╙╘┴ 2
╩╙╥ ╬┼╫╨╧╙ ; ╔NIT THE ╞╠╔ ROUTINES
╠─┴ #$┴:╙╘┴ $─011 ; ┬LANK SCREEN
╠─╪ #23 ; ╔NIT TABLES
┬╠╧╧╨ ╠─┴ #$94:╙╘┴ ┬┴╬╦,╪
╠─┴ #$96:╙╘┴ ┬┴╬╦+24,╪
─┼╪:┬╨╠ ┬╠╧╧╨
╠─╪ #15
╠╧╧╨0 ╠─┴ ┘╔╬╔╘,╪:┴╬─ #$77 ; ├HANGE TO $37 TO BETTER SEE THE
╙╘┴ ╒╨╧╙,╪ ; WORKINGS OF THE ROUTINES
╙╘┴ ╒╨╧╙+16,╪
╙╘┴ ╒╨╧╙+32,╪
─┼╪:┬╨╠ ╠╧╧╨0
╠─┴ #$34:╙╘┴ 1 ; ├OPY TO THE LAST VIDEO BANK
╠─┴ #$80:╙╘┴ ╙╥├+2 ; FROM $8000-$┬╞╞╞ TO $├000-$╞╞╞╞
╠─┴ #$├0:╙╘┴ ─╙╘+2
╠─╪ #0:╠─┘ #$40
╙╥├ ╠─┴ $8000,╪
─╙╘ ╙╘┴ $├000,╪
╔╬╪:┬╬┼ ╙╥├
╔╬├ ╙╥├+2:╔╬├ ─╙╘+2
─┼┘:┬╬┼ ╙╥├
╠─┴ #$37:╙╘┴ 1
╠─╪ #0 ; ╔NIT COLOR MEMORY
╠╨ ╠─┴ $3├00,╪:╙╘┴ $─800,╪ ; ┴LL 1024 BYTES ARE USED
╠─┴ $3─00,╪:╙╘┴ $─900,╪ ; - SOME EVEN TWICE!
╠─┴ $3┼00,╪:╙╘┴ $─┴00,╪
╠─┴ $3╞00,╪:╙╘┴ $─┬00,╪
╔╬╪:┬╬┼ ╠╨
╠─┴ $─├0─:├╠╔
╦┼┘╫ ╠─╪ #0:┬╬┼ ╦┼┘╫ ; ╫AIT FOR SPACE TO BE PRESSED
╙┼╔ ; ╙YSTEM TO NORMAL
╠─┴ #$37:╙╘┴ 1
╩╙╥ $╞─┴3
╠─┴ #$97:╙╘┴ $──00
╩╙╥ $┼5┴0
╠─┘ #3
╔╥╤╠ ╠─┴ $╞─30,┘:╙╘┴ $314,┘
─┼┘:┬╨╠ ╔╥╤╠
╠─╪ #0:╠─┴ #1 ; ├LEAR COLOR MEMORY
├╠╠ ╙╘┴ $─800,╪:╙╘┴ $─900,╪
╙╘┴ $─┴00,╪:╙╘┴ $─┬00,╪
╔╬╪:┬╬┼ ├╠╠
├╠╔:╥╘╙
┘╔╬╔╘ ┬┘╘ $78,$79,$7┴,$7┬,$7├,$7─,$7┼,$7╞
┬┘╘ $78,$79,$7┴,$7┬,$7├,$7─,$7┼,$7╞
*=*-<*+256
╔╥╤ ╠─┴ #$18:╙╘┴ $─016:╠─╪ #0:╠─┴ #$5┴
╔╬├ ─╒══┘:─┼├ ─╒══┘ ; ╙YNCHRONIZATION
╙╘╪ $─020:╙╘╪ $─021:╙╘┴ $─011
╠─┴ #$15:╙╘┴ $─018
╠─┴ #$97:╙╘┴ $──00
╠─╪ #44 ; ╫AIT FOR THE 4TH LINE
╠╠ ─┼╪:┬╨╠ ╠╠:╬╧╨
╠─╪ #0
╠╧╧╨3 ╬╧╨ ; ╠INECRUNCH-PART ROUTINE
╠─┴ ╒╨╧╙+6,╪:╔╬├ ─╒══┘:╙╘┴ $─011
╬╧╨:╬╧╨:╔╬├ ─╒══┘
╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
╔╬╪
┼1 ├╨╪ #$10:┬╬┼ ╠╧╧╨3 ; ╙KIP THAT MANY CHARACTER ROWS-4
┬╔╘ $┼┴
╠╧╧╨4 ╠─┴ ╒╨╧╙,╪:╔╬├ ─╒══┘:╙╘┴ $─011
╬╧╨:╬╧╨:╬╧╨:╔╬├ ─╒══┘
╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨:╠─┴ #0
╔╬╪
┼2 ├╨╪ #$1╞:┬╬┼ ╠╧╧╨4 ; ─ELAY ─═┴ UNTIL WE ARE AT THE
; 'SAME PLACE' EACH TIME
╠─┴ #0:╙╘┴ $─020 ; ╬OW WAIT FOR THE BAD LINE AND START ╞╠╔
┬╔╘ $┼┴:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨
╬╧╨:╬╧╨:╬╧╨:╬╧╨
┬0 ╠─┴ #$92:╙╘┴ $──00:╬╧╨ ; ╘HE RIGHT VIDEO BANK
; ╫AIT FOR 0-7 LINES TO SET THE ┼├═ MODE OFF
; (MAKES THE GRAPHICS VISIBLE)
╞0 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$08:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞1 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$18:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞2 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$28:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞3 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$38:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞4 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$48:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞5 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$58:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞6 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$68:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞7 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$78:╙╘┴ $─018
╠─╪ #╞╠╔╙┌:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
; ─O ╞╠╔ 18 MORE CHARACTER ROWS
╞8 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$08:╙╘┴ $─018
┬1 ╠─┴ ┬┴╬╦,╪:╙╘┴ $──00:┬╔╘ $┼┴
╞9 ╠─┴ #0:╙╘┴ $─011:╠─┴ #$18:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞┴ ╠─┴ #0:╙╘┴ $─011:╠─┴ #$28:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞┬ ╠─┴ #0:╙╘┴ $─011:╠─┴ #$38:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞├ ╠─┴ #0:╙╘┴ $─011:╠─┴ #$48:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞─ ╠─┴ #0:╙╘┴ $─011:╠─┴ #$58:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞┼ ╠─┴ #0:╙╘┴ $─011:╠─┴ #$68:╙╘┴ $─018:╬╧╨:╬╧╨:╬╧╨:╬╧╨:┬╔╘ $┼┴
╞╞ ╠─┴ #0:╙╘┴ $─011:╠─┴ #$78:╙╘┴ $─018:╬╧╨:╬╧╨:─┼╪:┬═╔ ┼╞╠╔:╩═╨ ╞8
┼╞╠╔ ╬╧╨
╠─┴ #$╞├
╫╠ ├═╨ $─012:┬╬┼ ╫╠
╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘
╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘:╔╬├ ─╒══┘
╔╬├ ─╒══┘:╔╬├ ─╒══┘:╙╘┴ $─020
╩╙╥ ╬┼╫╨╧╙ ; ╒PDATE THE LOCATION
╩╙╥ ├╚╨╧╙ ; ├HANGE TO A NEW LOCATION
╠─┴ $─├01:┴╬─ #$10:┬╬┼ ╧╓3 ; ├HECK FOR THE SPACE BAR
╠─┴ #0:╙╘┴ ╦┼┘╫+1
╧╓3 ╠─╪ #$53:╙╘╪ $─011:╔╬├ $─019:╩═╨ $┼┴81
╬┼╫╨╧╙ ╠─┴ #0 ; ╔NIT THE ╔╥╤ ROUTINE FOR THIS POSITION
╠╙╥:╠╙╥:╠╙╥:├╠├:┴─├ #4:╙╘┴ ┼1+1
╠─┴ #7:╙┼├:╙┬├ ╬┼╫╨╧╙+1:┴╬─ #7:╘┴╪:╘┴┘:├╠├:┴─├ #35:╙╘┴ ┼2+1
╠─┴ ╒╨╧╙+3+7,┘:─┼╪:┬═╔ ╩0:┴╬─ #$3╞
╩0 ╙╘┴ ╞7+1:┴╬─ #$3╞:╙╘┴ ╞╞+1
╠─┴ ╒╨╧╙+3+6,┘:─┼╪:┬═╔ ╩1:┴╬─ #$3╞
╩1 ╙╘┴ ╞6+1:┴╬─ #$3╞:╙╘┴ ╞┼+1
╠─┴ ╒╨╧╙+3+5,┘:─┼╪:┬═╔ ╩2:┴╬─ #$3╞
╩2 ╙╘┴ ╞5+1:┴╬─ #$3╞:╙╘┴ ╞─+1
╠─┴ ╒╨╧╙+3+4,┘:─┼╪:┬═╔ ╩3:┴╬─ #$3╞
╩3 ╙╘┴ ╞4+1:┴╬─ #$3╞:╙╘┴ ╞├+1
╠─┴ ╒╨╧╙+3+3,┘:─┼╪:┬═╔ ╩4:┴╬─ #$3╞
╩4 ╙╘┴ ╞3+1:┴╬─ #$3╞:╙╘┴ ╞┬+1
╠─┴ ╒╨╧╙+3+2,┘:─┼╪:┬═╔ ╩5:┴╬─ #$3╞
╩5 ╙╘┴ ╞2+1:┴╬─ #$3╞:╙╘┴ ╞┴+1
╠─┴ ╒╨╧╙+3+1,┘:─┼╪:┬═╔ ╩6:┴╬─ #$3╞
╩6 ╙╘┴ ╞1+1:┴╬─ #$3╞:╙╘┴ ╞9+1
╠─┴ ╒╨╧╙+3+0,┘:─┼╪:┬═╔ ╩7:┴╬─ #$3╞
╩7 ╙╘┴ ╞0+1:┴╬─ #$3╞:╙╘┴ ╞8+1
╠─┴ #$96:╙╘┴ ┬0+1:╠─┴ #199:╙┼├:╙┬├ ╬┼╫╨╧╙+1:┬├├ ╧╓2
╠╙╥:╠╙╥:╠╙╥:├╠├:┴─├ #5:╙╘┴ ┬1+1
╥╘╙
╧╓2 ╠─┴ #0:╙╘┴ ┬1+1:╠─╪ #$94:╙╘╪ ┬0+1:╥╘╙
├╚╨╧╙ ╠─╪ ╬┼╫╨╧╙+1
╠─┴ $─├00:╘┴┘ ; ╟ET JOYSTICK
┴╬─ #$10:┬╬┼ ─╔╥ ; ╔F NO BUTTON PRESSED
╘┘┴:┴╬─ #1:┬┼╤ ╒╨ ; ╔F JOY UP
╘┘┴:┴╬─ #2:┬┼╤ ─╧╫╬ ; ╔F JOY DOWN
╥╘╙
─╔╥ ╠─┴ #0:┬┼╤ ╒╨
─╧╫╬ ─┼╪:├╨╪ #$╞╞:┬╬┼ ─╧╦
╠─╪ #0:╙╘╪ ─╔╥+1 ; ├HANGE DIRECTION
─╧╦ ╙╘╪ ╬┼╫╨╧╙+1:╥╘╙
╒╨ ╔╬╪:├╨╪ #$╞─:┬├├ ╒╧╦ ; 251(LOCATIONS)+149(VISIBLE)=400
╠─╪ #$╞├:╙╘╪ ─╔╥+1 ; ├HANGE DIRECTION
╒╧╦ ╙╘╪ ╬┼╫╨╧╙+1:╥╘╙
--------------------------------------------------------------------------
╘HE ┬╞╠╔ FILE FORMAT:
╞ILE ┬╞╠╔ ─ISPLAY
╠INES ╧FFSET ╧FFSET ╠INES ╙IZE
├OLORS 0-1.3 0..55 944..999 22.7-24 56
╔ 1.3-2 56..79 - 24
2-24 80..999 0..919 0-22 920
24-24.7 1000..1023 920..943 22-22.7 24
╔╔ 0-1.3 0..55 1968..2024 49.3-50.6 56
1.3-24.7 56..1023 1000..1967 24-49.3 968
╟FX 0-1.3 0..447 7552..7999 22.7-24 448
╔ 1.3-2 448..639 - 192
2-24 640..7999 0..7359 0-22 7360
24-24.7 8000..8191 7360..7551 22-22.7 192
╔╔ 0-1.3 0..447 15744..16192 49.3-50.6 448
1.3-24.7 448..8191 8000..15743 24-49.3 7744
========================================================================
═AKING STABLE RASTER ROUTINES (├64 AND ╓╔├-20)
BY ═ARKO ═AKELA (═ARKO.═AKELA@╚╒╘.╞╔)
╨REFACE
╘OO MANY GRAPHICAL EFFECTS, ALSO CALLED RASTER EFFECTS, HAVE BEEN
CODED IN A VERY SLOPPY WAY. ╞OR INSTANCE, IF THERE ARE ANY COLOR BARS
ON THE SCREEN IN A GAME OR DEMO, THE COLORS OFTEN JITTER A BIT,
E.G. THEY ARE NOT STABLE. ┴ND ALSO, IT IS FAR TOO EASY TO MAKE
VIRTUALLY ANY DEMO CRASH BY HITTING THE ╥ESTORE KEY, OR AT LEAST CAUSE
VISUAL DISTORTIONS ON THE SCREEN.
┴S LATE AS A YEAR AGO ╔ STILL HADN'T CODED A STABLE RASTER INTERRUPT
ROUTINE MYSELF. ┬UT THEN ╔ HAD TO DO IT, SINCE ╔ WAS RESEARCHING THE
VIDEO CHIP TIMING DETAILS TOGETHER WITH MY ╟ERMAN FRIEND ┴NDREAS
┬OOSE. ╔T WAS ASHAMING THAT WE HAD THE SAME LEVEL OF KNOWLEDGE WHEN
IT CAME TO THE HARDWARE, BUT HE WAS THE ONLY OF US WHO HAD WRITTEN A
STABLE RASTER ROUTINE. ╫ELL, FINALLY ╔ MADE ME TO START CODING. ╔
USED THE SAME DOUBLE-INTERRUPT IDEA AS ┴NDREAS USED IN HIS ROUTINE.
┴FTER A COUPLE OF ERRORS MY ROUTINE WORKED, AND ╔ UNDERSTOOD HOW IT
WORKS EXACTLY. (╘HIS IS SOMETHING THAT SEPARATES US NORMAL CODERS
FROM DEMO PEOPLE: ╘HEY OFTEN CODE BY INSTINCT; BY PATCHING THE ROUTINE
UNTIL IT WORKS, WITHOUT KNOWING EXACTLY WHAT IS HAPPENING. ╘HAT'S WHY
DEMOS OFTEN RELY ON WEIRD THINGS, LIKE CRASH IF THE MEMORY IS NOT
INITIALIZED PROPERLY.)
╔N THIS ARTICLE, ╔ DOCUMENT TWO METHODS OF CREATING STABLE RASTER
ROUTINES ON ├OMMODORE COMPUTERS. ╘HE PRINCIPLES APPLY FOR MOST 8-BIT
COMPUTERS, NOT ONLY ├OMMODORES, BUT RASTER EFFECTS ARE VERY RARELY
SEEN ON OTHER COMPUTERS.
┬ACKGROUND
╫HAT ARE RASTER EFFECTS? ╘HEY ARE EFFECTS, WHERE YOU CHANGE THE
SCREEN APPEARANCE WHILE IT IS BEING DRAWN. ╞OR INSTANCE, YOU CAN SET
THE SCREEN COLOR TO WHITE IN THE TOP OF THE SCREEN, AND TO BLACK IN
THE MIDDLE OF THE SCREEN. ╔N THAT WAY, YOU WILL GET A PICTURE WHOSE
TOP HALF IS WHITE AND BOTTOM HALF BLACK. ╬ORMALLY SUCH EFFECTS ARE
IMPLEMENTED WITH INTERRUPT ROUTINES THAT ARE EXECUTED SYNCHRONIZED
WITH THE SCREEN REFRESH.
╘HE VIDEO CHIP ON THE ├OMMODORE 64 AND MANY OTHER VIDEOCHIPS HAVE A
SPECIAL INTERRUPT FEATURE CALLED THE ╥ASTER INTERRUPT. ╔T WILL
GENERATE AN ╔╥╤ IN THE BEGINNING OF A SPECIFIED RASTER LINE. ╧N OTHER
COMPUTERS, LIKE THE ╓╔├-20, THERE IS NO ╥ASTER INTERRUPT, BUT YOU CAN
GENERATE THE INTERRUPTS WITH A TIMER, PROVIDED THAT THE TIMER AND THE
VIDEOCHIP ARE CLOCKED FROM THE SAME SOURCE.
┼VEN IF THE PROCESSOR GETS AN INTERRUPT SIGNAL AT THE SAME POSITION ON
EACH VIDEO FRAME, IT WON'T ALWAYS BE EXECUTING THE FIRST INSTRUCTION
OF THE INTERRUPT ROUTINE AT THE SAME SCREEN POSITION. ╘HE ╬═╧╙ 6502
MACHINE INSTRUCTIONS CAN TAKE 2 TO 9 MACHINE CYCLES TO EXECUTE, AND IF
THE MAIN PROGRAM CONTAINS INSTRUCTIONS OF VERY VARYING LENGTHS, THE
BEGINNING POSITION OF THE INTERRUPT CAN JUMP BETWEEN 7 DIFFERENT
POSITIONS. ╘HIS IS WHY YOU NEED TO SYNCHRONIZE THE RASTER ROUTINE
WHEN DOING SERIOUS EFFECTS.
┴LSO, EXECUTING THE INTERRUPT SEQUENCE WILL TAKE 7 ADDITIONAL CYCLES,
AND THE INTERRUPT SEQUENCE WILL ONLY START AFTER THE CURRENT
INSTRUCTION IF THE INTERRUPT ARRIVED AT LEAST TWO CYCLES BEFORE THE
END OF THE CURRENT INSTRUCTION. ╔T IS EVEN POSSIBLE THAT AN INTERRUPT
ARRIVES WHILE INTERRUPTS ARE DISABLED AND THE PROCESSOR IS JUST
STARTING TO EXECUTE A ├╠╔ INSTRUCTION. ┴LAS, THE PROCESSOR WILL NOT
JUMP TO THE INTERRUPT RIGHT AFTER THE ├╠╔, BUT IT WILL EXECUTE THE
NEXT INSTRUCTION BEFORE JUMPING TO IT. ╘HIS IS NATURAL, SINCE THE ├╠╔
TAKES ONLY TWO CYCLES. ┬UT ANYWAY, THIS IS ONLY A CONSTANT IN OUR
EQUATION, AND ACTUALLY OUT OF THE SCOPE OF THIS ARTICLE.
╚OW TO SYNCHRONIZE A RASTER INTERRUPT ROUTINE? ╘HE ONLY WAY IS TO
CHECK THE CURRENT SCREEN POSITION AND DELAY APPROPRIATELY MANY CYCLES.
╘HERE ARE SEVERAL WAYS OF DOING THIS, SOME OF WHICH ARE VERY AWFUL AND
INEFFICIENT. ╘HE UGLIEST WAYS OF DOING THIS ON THE ├OMMODORE 64 ╔
KNOW ARE BUSY-WAITING SEVERAL RASTER LINES AND POLLING THE RASTER LINE
VALUE, OR USING THE ╠IGHT PEN FEATURE, WHICH WILL FAIL IF THE USER
PRESSES THE FIRE BUTTON ON ╩OYSTICK PORT 1. ╚ERE ╔ WILL PRESENT TWO
WAYS, BOTH VERY ELEGANT IN MY OPINION.
╒SING AN AUXILIARY TIMER
╧N THE ╓╔├-20, THERE IS NO ╥ASTER INTERRUPT FEATURE IN THE VIDEO CHIP.
┴LL YOU CAN DO IS TO USE A TIMER FOR GENERATING RASTER INTERRUPTS.
┴ND IF YOU USE TWO TIMERS RUNNING AT A CONSTANT PHASE DIFFERENCE, YOU
CAN GET FULL SYNCHRONIZATION. ╘HE FIRST TIMER GENERATES THE RASTER
INTERRUPT, AND THE SECOND TIMER, THE AUXILIARY TIMER, TELLS THE RASTER
ROUTINE WHERE IT IS RUNNING. ┴CTUALLY YOU COULD EVEN USE THE FIRST
TIMER ALSO FOR THE CHECKING, BUT THE CODE WILL LOOK NICER IN THE WAY ╔
WILL BE PRESENTING NOW. ┬ESIDES, YOU CAN USE THE AUXILIARY TIMER IDEA
EVEN WHEN REAL RASTER INTERRUPTS ARE AVAILABLE.
╘HE MAJOR DRAWBACK OF USING AN AUXILIARY TIMER IS INITIALIZING IT.
╘HE INITIALIZATION ROUTINE MUST SYNCHRONIZE WITH THE SCREEN, THAT IS,
WAIT FOR THE BEGINNING OF THE WANTED RASTER LINE. ╘O ACCOMPLISH THIS,
THE ROUTINE MUST FIRST WAIT FOR A RASTER LINE THAT OCCURS A BIT
EARLIER. ┴BOUT THE ONLY WAY TO DO THIS IS WITH A LOOP LIKE
╠─┴ #VALUE
LOOP ├═╨ RASTER
┬╬┼ LOOP
╧NE ROUND OF THIS LOOP WILL TAKE 4+3=7 CYCLES TO EXECUTE, ASSUMING
THAT ABSOLUTE ADDRESSING IS BEING USED. ╘HE LOOP WILL BE FINISHED IF
THE RASTER REGISTER CONTAINS THE WANTED VALUE WHILE THE PROCESSOR
READS IT ON THE LAST CYCLE OF THE ├═╨ INSTRUCTION. ╘HE RASTER
REGISTER CAN ACTUALLY HAVE CHANGED ALREADY ON THE FIRST CYCLE OF THE
┬╬┼ INSTRUCTION ON THE PREVIOUS RUN OF THE LOOP, THAT IS 7 CYCLES
EARLIER!
┬ECAUSE OF THIS, THE ROUTINE MUST POLL THE RASTER REGISTER FOR SEVERAL
RASTER LINES, ALWAYS CONSUMING ONE CYCLE MORE IF THE RASTER REGISTER
CHANGED TOO EARLY. ┴S THE SYNCHRONIZATION CAN BE OFF AT MOST BY 7
CYCLES, A LOOP OF 7 RASTER REGISTER VALUE CHANGES WOULD DO, BUT ╔ MADE
THE LOOP A BIT LONGER IN MY ╓╔├-20 ROUTINE. (╫ELL, ╔ HAVE TO ADMIT IT,
╔ WAS TOO LAZY TO MAKE IT WORK ONLY WITH 7 ROUNDS.)
┴FTER THE INITIALIZATION ROUTINE IS FULLY SYNCHRONIZED THE SCREEN, IT
CAN SET UP THE TIMER(S) AND INTERRUPTS AND EXIT. ╘HE AUXILIARY TIMER
IN MY ╓╔├-20 DEMO ROUTINE IS SEVERAL DOZENS OF CYCLES AFTER THE
PRIMARY TIMER, SEE THE SOURCE CODE FOR COMMENTS. ╔T IS ARRANGED SO
THAT THE AUXILIARY TIMER WILL BE AT LEAST 0 WHEN IT IS BEING READ IN
THE RASTER ROUTINE. ╘HE RASTER ROUTINE WILL WAIT AS MANY EXTRA CYCLES
AS THE AUXILIARY TIMER READS, HOWEVER AT MOST 15 CYCLES.
╒SING DOUBLE RASTER INTERRUPT
╧N THE ├OMMODORE 64, ╔ HAVE NEVER SEEN THE AUXILIARY TIMER SCHEME
BEING USED. ┴CTUALLY ╔ HAVEN'T SEEN IT BEING USED ANYWHERE, ╔ WAS
PROBABLY THE FIRST ONE WHO MADE A STABLE RASTER INTERRUPT ROUTINE ON
THE ╓╔├-20. ╔NSTEAD, THE DOUBLE INTERRUPT METHOD IS BECOMING THE
STANDARD ON THE ├64 SIDE.
╘HE DOUBLE INTERRUPT METHOD IS BASED ENTIRELY ON THE ╥ASTER INTERRUPT
FEATURE OF THE VIDEO CHIP. ╔N THE FIRST RASTER INTERRUPT ROUTINE, THE
PROGRAM SETS UP ANOTHER RASTER INTERRUPT ON A FURTHER LINE, CHANGES
THE INTERRUPT VECTOR AND ENABLES INTERRUPTS.
╔N THE PLACE WHERE THE SECOND RASTER INTERRUPT WILL OCCUR, THERE WILL
BE 2-BYTE INSTRUCTIONS IN THE FIRST INTERRUPT ROUTINE. ╔N THIS WAY,
THE BEGINNING OF THE NEXT RASTER INTERRUPT WILL BE OFF AT MOST BY ONE
CYCLE. ╙OME CODERS MIGHT NOT CARE ABOUT THIS ONE CYCLE, BUT IF YOU
CAN DO IT RIGHT, WHY WOULDN'T YOU DO IT RIGHT UNTIL THE END?
┴T THE BEGINNING OF THE SECOND RASTER INTERRUPT ROUTINE, YOU WILL READ
THE RASTER LINE COUNTER REGISTER AT THE POINT WHERE IT IS ABOUT TO
CHANGE. ╫HEN THE RASTER ROUTINE IS BEING EXECUTED, THERE ARE TWO
POSSIBILITIES: ┼ITHER THE RASTER COUNTER HAS JUST CHANGED, OR IT WILL
CHANGE ON THE NEXT CYCLE. ╙O, YOU JUST NEED TO COMPARE IF THE
REGISTER CHANGED ONE CYCLE TOO EARLY OR NOT, AND DELAY A CYCLE WHEN
NEEDED. ╘HIS IS EASILY ACCOMPLISHED WITH A BRANCH TO THE NEXT ADDRESS.
╧F COURSE, SOMEWHERE IN YOUR SECOND RASTER INTERRUPT ROUTINE YOU MUST
RESTORE THE ORIGINAL RASTER INTERRUPT POSITION AND SET THE INTERRUPT
VECTOR TO POINT TO THE FIRST INTERRUPT ROUTINE.
┴PPLYING IN PRACTICE
╔ ALMOST FORGOT MY COMPLAINTS ABOUT DEMOS CRASHING WHEN YOU ACTIVELY
HIT THE ╥ESTORE KEY. ╧N THE ╓╔├-20, YOU CAN DISABLE ╬═╔ INTERRUPTS
GENERATED BY THE ╥ESTORE KEY, AND ON THE ├64, YOU CAN GENERATE AN ╬═╔
INTERRUPT WITH THE ├╔┴2 TIMER AND LEAVE THE ╬═╔-LINE LOW, SO THAT NO
FURTHER HIGH-TO-LOW TRANSITIONS WILL BE RECOGNIZED ON THE LINE. ╘HE
EXAMPLE PROGRAMS DEMONSTRATE HOW TO DO THIS.
╙O FAR, THIS ARTICLE HAS BEEN PRETTY THEORETICAL. ╘O APPLY THESE
RESULTS IN PRACTICE, YOU MUST DEFINITELY KNOW HOW MANY ├╨╒ CLOCK
CYCLES THE VIDEO CHIP CONSUMES WHILE DRAWING A SCAN LINE. ╘HIS IS
FAIRLY EASY TO MEASURE WITH A TIMER INTERRUPT, IF YOU PATCH THE
INTERRUPT HANDLER SO THAT IT CHANGES THE SCREEN COLOR ON EACH RUN.
╙ET THE TIMER INTERVAL TO ╠╔╬┼╙*├╧╠╒═╬╙ CYCLES, WHERE ╠╔╬┼╙ IS THE
AMOUNT OF RASTER LINES AND ├╧╠╒═╬╙ IS YOUR GUESS FOR THE AMOUNT OF
CLOCK CYCLES SPENT IN A RASTER LINE.
╔F YOUR GUESS IS RIGHT, THE COLOR WILL ALWAYS BE CHANGED IN THE SAME
SCREEN POSITION (NEGLECTING THE 7-CYCLE JITTER). ╫HEN ADJUSTING THE
TIMER, REMEMBER THAT THE TIMERS ON THE 6522 ╓╔┴ REQUIRE 2 CYCLES FOR
RE-LOADING, AND THE ONES ON THE 6526 ├╔┴ NEED ONE EXTRA CYCLE. ╦EEP
TRYING DIFFERENT TIMER VALUES UNTIL YOU THE SCREEN COLOR CHANGES AT
ONE FIXED POSITION.
├OMMODORE USED SEVERAL DIFFERENT VALUES FOR ╠╔╬┼╙ AND ├╧╠╒═╬╙ ON ITS
VIDEOCHIPS. ╘HEY NEVER MANAGED TO MAKE THE SCREEN REFRESH RATE
EXACTLY 50 OR 60 ╚ERTZ, BUT THEY DIDN'T HESITATE TO CLAIM THAT THEIR
COMPUTERS COMPLY WITH THE ╨┴╠-┬ OR ╬╘╙├-═ STANDARDS. ╔N THE FOLLOWING
TABLES ╔ HAVE GATHERED SOME INFORMATION OF SOME ├OMMODORE VIDEO CHIPS.
╬╘╙├-═ SYSTEMS:
├HIP ├RYSTAL ─OT ╨ROCESSOR ├YCLES/ ╠INES/
╚OST ╔─ FREQ/╚Z CLOCK/╚Z CLOCK/╚Z LINE FRAME
------ -------- -------- -------- --------- ------- ------
╓╔├-20 6560-101 14318181 4090909 1022727 65 261
├64 6567╥56┴ 14318181 8181818 1022727 64 262
├64 6567╥8 14318181 8181818 1022727 65 263
╠ATER ╬╘╙├-═ VIDEO CHIPS WERE MOST PROBABLY LIKE THE 6567╥8. ╬OTE
THAT THE PROCESSOR CLOCK IS A 14TH OF THE CRYSTAL FREQUENCY ON ALL
╬╘╙├-═ SYSTEMS.
╨┴╠-┬ SYSTEMS:
├HIP ├RYSTAL ─OT ╨ROCESSOR ├YCLES/ ╠INES/
╚OST ╔─ FREQ/╚Z CLOCK/╚Z CLOCK/╚Z LINE FRAME
------ -------- -------- -------- --------- ------- ------
╓╔├-20 6561-101 4433618 4433618 1108405 71 312
├64 6569 17734472 7881988 985248 63 312
╧N THE ╨┴╠-┬ ╓╔├-20, THE CRYSTAL FREQUENCY IS SIMULTANEOUSLY THE DOT
CLOCK, WHICH IS ┬╘╫ A 4TH OF THE CRYSTAL FREQUENCY USED ON THE ├64.
╧N THE ├64, THE CRYSTAL FREQUENCY IS DIVIDED BY 18 TO GENERATE THE
PROCESSOR CLOCK, WHICH IN TURN IS MULTIPLIED BY 8 TO GENERATE THE
DOT CLOCK.
╘HE BASIC TIMINGS ARE THE SAME ON ALL 6569 REVISIONS, AND ALSO ON
ANY LATER ├64 AND ├128 VIDEO CHIPS. ╔F ╔ REMEMBER CORRECTLY, THESE
VALUES WERE THE SAME ON THE ├16 VIDEOCHIP ╘┼─ AS WELL.
╬OTE THAT THE DOT CLOCK IS 4 TIMES THE PROCESSOR CLOCK ON THE ╓╔├-20,
AND 8 TIMES THAT ON THE ├64. ╘HAT IS, ONE PROCESSOR CYCLE IS HALF A
CHARACTER WIDE ON THE ╓╔├-20, AND A FULL CHARACTER ON A ├64. ╔ DON'T
HAVE EXACT MEASUREMENTS OF THE ╓╔├-20 TIMING, BUT IT SEEMS THAT WHILE
THE ╓╔├-20 VIDEOCHIPS DRAW THE CHARACTERS ON THE SCREEN, IT FIRST
READS THE CHARACTER CODE, AND THEN, ON THE FOLLOWING VIDEO CYCLE, THE
APPEARANCE ON THE CURRENT CHARACTER LINE. ╘HERE ARE NO BAD LINES,
LIKE ON THE ├64, WHERE THE CHARACTER CODES (AND COLORS) ARE FETCHED ON
EVERY 8TH RASTER LINE.
╘HOSE ONES WHO GOT UPSET WHEN ╔ SAID THAT ├OMMODORE HAS NEVER MANAGED
TO MAKE A FULLY ╨┴╠-┬ OR ╬╘╙├-═ COMPLIANT 8-BIT COMPUTER SHOULD TAKE A
CLOSER LOOK AT THE "╠INES/FRAME" COLUMNS. ╔F THAT DOES NOT CONVINCE
YOU, CALCULATE THE RASTER LINE RATE AND THE SCREEN REFRESH RATE FROM
THE VALUES IN THE TABLE AND SEE THAT THEY DON'T COMPLY WITH THE
STANDARDS. ╘O CALCULATE THE LINE RATE, DIVIDE THE PROCESSOR CLOCK
FREQUENCY BY THE AMOUNT OF CYCLES PER LINE. ╘O GET THE SCREEN REFRESH
RATE, DIVIDE THAT FREQUENCY BY THE AMOUNT OF RASTER LINES.
╘HE ├ODE
╧╦, ENOUGH THEORY AND BACKGROUND. ╚ERE ARE THE TWO EXAMPLE PROGRAMS,
ONE FOR THE ╓╔├-20 AND ONE FOR THE ├64. ╔N ORDER TO FULLY UNDERSTAND
THEM, YOU NEED TO KNOW THE EXACT EXECUTION TIMES OF ╬═╧╙ 6502
INSTRUCTIONS. (┴LL 8-BIT ├OMMODORE COMPUTERS USE THE ╬═╧╙ 6502
PROCESSOR CORE, EXCEPT THE ├65 PROTOTYPE, WHICH USED A INFERIOR ├═╧╙
VERSION WITH ALL NICE POORLY-DOCUMENTED FEATURES REMOVED.) ┘OU SHOULD
CHECK THE 64DOC DOCUMENT, AVAILABLE ON MY ╫╫╫ PAGES AT
HTTP://WWW.HUT.FI/▐MSMAKELA/CBM/EMUL/X64/64DOC.HTML, OR VIA ╞╘╨ AT
FTP.FUNET.FI:/PUB/CBM/DOCUMENTS/64DOC. ╔ CAN ALSO E-MAIL IT TO YOU ON
REQUEST.
┴LSO, ╔ HAVE WRITTEN A COMPLETE DESCRIPTION OF THE VIDEO TIMING ON THE
6567╥56┴, 6567╥8 AND 6569 VIDEO CHIPS, WHICH COULD MAYBE BE TURNED
INTO ANOTHER ├=╚ACKING ARTICLE. ╘HE DOCUMENT IS CURRENTLY PARTIALLY
IN ┼NGLISH AND PARTIALLY IN ╟ERMAN. ╘HE ┼NGLISH PART IS AVAILABLE
FROM FTP.FUNET.FI AS /PUB/CBM/DOCUMENTS/PAL.TIMING, AND ╔ CAN SEND
COPIES OF THE ╟ERMAN PART (SCREEN RESOLUTION, SPRITE DISTURBANCE
MEASUREMENTS, AND MORE PRECISE TIMING INFORMATION) VIA E-MAIL.
╘HE CODE IS WRITTEN FOR THE ─┴╙═ ASSEMBLER, OR MORE PRECISELY FOR A
EXTENDED ┴╬╙╔ ├ PORT OF IT MADE BY ╧LAF ╙EIBERT. ╘HIS EXCELLENT
CROSS-ASSEMBLER IS AVAILABLE AT FTP.FUNET.FI IN /PUB/CBM/PROGRAMMING.
╞IRST THE RASTER DEMO FOR THE ╓╔├-20. ╬OTE THAT ON THE ╓╔├-20, THE
$9004 REGISTER CONTAINS THE UPPER 8 BITS OF THE RASTER COUNTER. ╙O,
THIS REGISTER CHANGES ONLY ON EVERY SECOND LINE. ╔ HAVE TESTED THE
PROGRAM ON MY 6561-101-BASED ╓╔├-20, BUT NOT ON AN ╬╘╙├-═ SYSTEM.
╔T WAS HARD TO GET IN CONTACT WITH ╬╘╙├-═ ╓╔├-20 OWNERS. ─ANIEL
─ALLMANN, WHO HAS A ╬╘╙├-═ ╓╔├-20, ALTHOUGH HE LIVES IN ╟ERMANY, RAN
MY TEST TO DETERMINE THE AMOUNT OF CYCLES PER LINE AND LINES PER FRAME
ON THE 6560-101. ╒NFORTUNATELY, THE SECOND ╓╔┴ OF HIS ╓╔├-20 IS
PARTIALLY BROKEN, AND BECAUSE OF THIS, THIS PROGRAM DID NOT WORK ON
HIS COMPUTER. ├RAIG ┬RUCE RAN THE PROGRAM ONCE, AND HE REPORTED THAT
IT ALMOST WORKED. ╔ CORRECTED A LITTLE BUG IN THE CODE, SO THAT NOW
THE DISPLAY SHOULD BE STABLE ON AN ╬╘╙├-═ SYSTEM, TOO. ┬UT THE ACTUAL
RASTER EFFECT, SIX 16*16-PIXEL BOXES CENTERED AT THE TOP BORDER, ARE
VERY LIKELY TO BE OFF THEIR POSITION.
PROCESSOR 6502
╬╘╙├ = 1
╨┴╠ = 2
;╙┘╙╘┼═ = ╬╘╙├ ; 6560-101: 65 CYCLES PER RASTER LINE, 261 LINES
╙┘╙╘┼═ = ╨┴╠ ; 6561-101: 71 CYCLES PER RASTER LINE, 312 LINES
#IF ╙┘╙╘┼═ & ╨┴╠
╠╔╬┼╙ = 312
├┘├╠┼╙_╨┼╥_╠╔╬┼ = 71
#ENDIF
#IF ╙┘╙╘┼═ & ╬╘╙├
╠╔╬┼╙ = 261
├┘├╠┼╙_╨┼╥_╠╔╬┼ = 65
#ENDIF
╘╔═┼╥_╓┴╠╒┼ = ╠╔╬┼╙ * ├┘├╠┼╙_╨┼╥_╠╔╬┼ - 2
.ORG $1001 ; FOR THE UNEXPANDED ╓IC-20
; ╘HE ┬┴╙╔├ LINE
BASIC:
.WORD 0$ ; LINK TO NEXT LINE
.WORD 1995 ; LINE NUMBER
.BYTE $9┼ ; ╙┘╙ TOKEN
; ╙┘╙ DIGITS
.IF (* + 8) / 10000
.BYTE $30 + (* + 8) / 10000
.ENDIF
.IF (* + 7) / 1000
.BYTE $30 + (* + 7) % 10000 / 1000
.ENDIF
.IF (* + 6) / 100
.BYTE $30 + (* + 6) % 1000 / 100
.ENDIF
.IF (* + 5) / 10
.BYTE $30 + (* + 5) % 100 / 10
.ENDIF
.BYTE $30 + (* + 4) % 10
0$:
.BYTE 0,0,0 ; END OF ┬┴╙╔├ PROGRAM
START:
LDA #$7F
STA $912E ; DISABLE AND ACKNOWLEDGE INTERRUPTS
STA $912D
STA $911E ; DISABLE ╬═╔S (╥ESTORE KEY)
;SYNCHRONIZE WITH THE SCREEN
SYNC:
LDX #28 ; WAIT FOR THIS RASTER LINE (TIMES 2)
0$:
CPX $9004
BNE 0$ ; AT THIS STAGE, THE INACCURACY IS 7 CLOCK CYCLES
; THE PROCESSOR IS IN THIS PLACE 2 TO 9 CYCLES
; AFTER $9004 HAS CHANGED
LDY #9
BIT $24
1$:
LDX $9004
TXA
BIT $24
#IF ╙┘╙╘┼═ & ╨┴╠
LDX #24
#ENDIF
#IF ╙┘╙╘┼═ & ╬╘╙├
BIT $24
LDX #21
#ENDIF
DEX
BNE *-1 ; FIRST SPEND SOME TIME (SO THAT THE WHOLE
CMP $9004 ; LOOP WILL BE 2 RASTER LINES)
BCS *+2 ; SAVE ONE CYCLE IF $9004 CHANGED TOO LATE
DEY
BNE 1$
; NOW IT IS FULLY SYNCHRONIZED
; 6 CYCLES HAVE PASSED SINCE LAST $9004 CHANGE
; AND WE ARE ON LINE 2(28+9)=74
;INITIALIZE THE TIMERS
TIMERS:
LDA #$40 ; ENABLE ╘IMER ┴ FREE RUN OF BOTH ╓╔┴S
STA $911B
STA $912B
LDA #<╘╔═┼╥_╓┴╠╒┼
LDX #>╘╔═┼╥_╓┴╠╒┼
STA $9116 ; LOAD THE TIMER LOW BYTE LATCHES
STA $9126
#IF ╙┘╙╘┼═ & ╨┴╠
LDY #7 ; MAKE A LITTLE DELAY TO GET THE RASTER EFFECT TO THE
DEY ; RIGHT PLACE
BNE *-1
NOP
NOP
#ENDIF
#IF ╙┘╙╘┼═ & ╬╘╙├
LDY #6
DEY
BNE *-1
BIT $24
#ENDIF
STX $9125 ; START THE ╔╥╤ TIMER ┴
; 6560-101: 65 CYCLES FROM $9004 CHANGE
; 6561-101: 77 CYCLES FROM $9004 CHANGE
LDY #10 ; SPEND SOME TIME (1+5*9+4=55 CYCLES)
DEY ; BEFORE STARTING THE REFERENCE TIMER
BNE *-1
STX $9115 ; START THE REFERENCE TIMER
POINTERS:
LDA #<IRQ ; SET THE RASTER ╔╥╤ ROUTINE POINTER
STA $314
LDA #>IRQ
STA $315
LDA #$C0
STA $912E ; ENABLE ╘IMER ┴ UNDERFLOW INTERRUPTS
RTS ; RETURN
IRQ:
; IRQ (EVENT) ; > 7 + AT LEAST 2 CYCLES OF LAST INSTRUCTION (9 TO 16 TOTAL)
; PHA ; 3
; TXA ; 2
; PHA ; 3
; TYA ; 2
; PHA ; 3
; TSX ; 2
; LDA $0104,X ; 4
; AND #XX ; 2
; BEQ ; 3
; JMP ($314) ; 5
; ---
; 38 TO 45 CYCLES DELAY AT THIS STAGE
LDA $9114 ; GET THE ╬═╔ TIMER ┴ VALUE
; (42 TO 49 CYCLES DELAY AT THIS STAGE)
; STA $1E00 ; UNCOMMENT THESE IF YOU WANT TO MONITOR
; LDY $9115 ; THE REFERENCE TIMER ON THE SCREEN
; STY $1E01
CMP #8 ; ARE WE MORE THAN 7 CYCLES AHEAD OF TIME?
BCC 0$
PHA ; YES, SPEND 8 EXTRA CYCLES
PLA
AND #7 ; AND RESET THE HIGH BIT
0$:
CMP #4
BCC 1$
BIT $24 ; WASTE 4 CYCLES
AND #3
1$:
CMP #2 ; SPEND THE REST OF THE CYCLES
BCS *+2
BCS *+2
LSR
BCS *+2 ; NOW IT HAS TAKEN 82 CYCLES FROM THE BEGINNING OF THE ╔╥╤
EFFECT:
LDY #16 ; PERFORM AMAZING VIDEO EFFECT
LDA $900F
TAX
EOR #$F7
0$:
STA $900F
STX $900F
STA $900F
STX $900F
STA $900F
STX $900F
STA $900F
STX $900F
STA $900F
STX $900F
STA $900F
STX $900F
PHA
PLA
#IF ╙┘╙╘┼═ & ╨┴╠
PHA
PLA
NOP
#ENDIF
#IF ╙┘╙╘┼═ & ╬╘╙├
BIT $24
#ENDIF
NOP
DEY
BNE 0$ ; END OF AMAZING VIDEO EFFECT
JMP $EABF ; RETURN TO NORMAL ╔╥╤
┴ND AFTER YOU HAVE RECOVERED FROM THE SCHOCK OF SEEING A ╓╔├-20
PROGRAM, HERE IS AN EXAMPLE FOR THE ├64. ╔T DOES ALSO SOMETHING
NOTEWORTHY; IT REMOVES THE SIDE BORDERS ON A NORMAL SCREEN WHILE
DISPLAYING ALL EIGHT SPRITES. ╫ELL, IT CANNOT REMOVE THE BORDERS ON
BAD LINES, AND THE BAD LINES LOOK PRETTY BAD. ┬UT ╔ COULD USE THE
PROGRAM FOR WHAT ╔ WANTED: ╔ MEASURED THE SPRITE DISTORTIONS ON ALL
VIDEOCHIP TYPES ╔ HAD AT HAND. (╞┘╔: THE SPRITES 0-2 GET DISTORTED AT
THE VERY RIGHT OF THE SCREEN, AND THE SPRITES 6 AND 7 ARE INVISIBLE AT
THE VERY LEFT OF THE SCREEN. ┘OU WILL NEED A MONITOR WITH HORIZONTAL
SIZE CONTROLS TO WITNESS THESE EFFECTS.)
╘HIS PROGRAM IS REALLY ROBUST, IT INSTALLS ITSELF NICELY TO THE
INTERRUPT ROUTINE CHAIN. ╔T EVEN HAS AN ENTRY POINT FOR DEINSTALLING
ITSELF. ┬UT IN ITS ROBUSTNESS IT USES SELF-MODIFYING CODE TO STORE
THE ORIGINAL INTERRUPT ROUTINE ADDRESS. :-)
╘HE CODE ALSO RELIES ON THE PAGE BOUNDARIES IN BEING WHERE THEY ARE.
╘HE CYCLES ARE COUNTED SO THAT THE BRANCHES "IRQLOOP" MUST TAKE 4
CYCLES. ╔F THE "IRQLOOP" COMES TO THE SAME ├╨╒ PAGE WITH THE BRANCH
INSTRUCTIONS, YOU MUST ADD ONE CYCLE TO THE LOOP IN A WAY OR ANOTHER.
╫HEN CODING THE ROUTINE, ╔ NOTICED AGAIN HOW STUPID ASSEMBLY CODING
CAN BE, ESPECIALLY CONDITIONAL ASSEMBLING. ╔N A MACHINE LANGUAGE
MONITOR YOU HAVE FAR BETTER CONTROL ON PAGE BOUNDARIES. ┬╘╫, YOU
MIGHT WONDER WHY ╔ DISABLE THE ╥ESTORE KEY IN A SUBROUTINE AT THE END
AND NOT IN THE BEGINNING OF THE PROGRAM. ╫ELL, THE ROUTINE WAS SO
LONG THAT IT WOULD HAVE AFFECTED THE "IRQLOOP" PAGE BOUNDARIES. ┴ND ╔
DIDN'T WANT TO RISK THE MODIFIED PROGRAMS WORKING ON ALL THREE
DIFFERENT VIDEOCHIP TYPES ON THE FIRST TRY.